【问题标题】:Python - Data analysis of XML file with ElementTreePython - 使用 ElementTree 对 XML 文件进行数据分析
【发布时间】:2017-03-28 10:18:42
【问题描述】:

这将是一个很长的问题,因为我的问题非常具体,需要一些解释,对此深表歉意。

我有一个包含多个“spreekbeurten”的 XML 文件。我想从 spreekbeurten 获取所有文本,问题是有些 spreekbeurten 没有“al-group”,有些有。 (请参阅下面的代码,例如 xml 文件)

  <handelingen>
      <spreekbeurt nieuw="ja">
        <spreker>   
          <voorvoegsels>De heer</voorvoegsels>
          <naam>
            <achternaam>Recourt</achternaam>
          </naam> (<politiek>PvdA</politiek>):</spreker>
        <tekst status="goed">
          <al-groep>
                <al>Much</al>
                <al>Very</al>
                <al>Hungry</al>
                <al>I am</al>
                <al>Hello.</al>
              </al-groep>
            </tekst>
          </spreekbeurt>

      <spreekbeurt nieuw="nee">
        <spreker>
          <voorvoegsels>De heer</voorvoegsels>
          <naam>
            <achternaam>Van Raak</achternaam>
          </naam> (<politiek>SP</politiek>):</spreker>
        <tekst status="goed">
          <al>Just one word</al>
        </tekst>
      </spreekbeurt>

  </handelingen>

我想获得演讲者他的“voorvoegsel”和“achternaaam”以及演讲者的相应文本。为此,我编写了以下代码:

def extractingText(filepath):
    #Checking the size to keep empty files (size = 0 bytes) out!
    statsinfo = os.stat(filepath)    
    if int(statsinfo.st_size) == 0:
        return None

    tree = ET.parse(filepath)
    root = tree.getroot()
    #Hiermee kijken we naar handelingen (het gedeelte waar de gesproken stukken in staan)
    for handelingen in root.iter('handelingen'):
        spreekbeurt = []
        #Hiermee kijken we naar alle spreekbeuten van de personen
        for spreekbeurt in handelingen.iter('spreekbeurt'):
            achternaam = spreekbeurt.find('spreker/naam/achternaam').text
            voorvoegsel = spreekbeurt.find('spreker/voorvoegsels').text  
            #Defining what the text is, sometimes it is withn an al-group and sometimes it isn't
            text = spreekbeurt.find('tekst/al-groep/al') #<- TO FIX I SUPPOSE I NEED TO ADD A FOR LOOP HERE?
            if text == None:
                text = spreekbeurt.find('tekst/al')
            #Zoals je ziet heb ik nu voor alle spreekbeurten een text gevonden
            print text.text

    return None

问题在于,如果“spreekbeurt”包含“al-group”,我只会得到示例“Much”中的第一个“al”,而不是所有其他词。我如何确保如果 'spreekbeurt' 包含 a 我选择了 'al' 语句中的所有文本,而不仅仅是第一个?

提前致谢!

【问题讨论】:

    标签: python xml python-2.7 xml-parsing elementtree


    【解决方案1】:

    我相信您的答案在 xml.etree.ElementTree.Element.findall 中。 然后将结果放入列表中并检查列表是否为无元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2017-08-31
      相关资源
      最近更新 更多