ElementTree似乎没有在树中得到一些文本/元素

时间:2019-03-07 14:13:23

标签: python xml python-3.7

我有一个要解析的Wikipedia转储,使用Python xml解析器ElementTree时遇到一些困难/神秘问题。

我最近的问题是,ElementTree似乎找不到实际存在的文本。这是一个示例数据:

<page>
    <title>Cengiz Han</title>
    <ns>0</ns>
    <id>10</id>
    <revision>
      <id>20337884</id>
      <parentid>20218916</parentid>
      <timestamp>2019-01-29T14:02:43Z</timestamp>
      <contributor>
        <username>CommonsDelinker</username>
        <id>31545</id>
      </contributor>
      <comment>China_11b.jpg dosyası Map_of_China_1142.jpg ile değiştirildi</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text xml:space="preserve">
         ...some long Genghis Khan stuff...
      </text>
</page>

现在,当我用这个解析它时:

for event, elem in et.iterparse('dataset/wiki_test', events=('start', 'end', 'start-ns', 'end-ns')):
    if event == 'start':
        if elem.tag == 'page':
            if len(list(elem)) == 0:
                continue
            title = elem.find('title').text
            if title == None or 'MediaWiki' in title:
                elem.clear()
                continue
            wiki_id = elem.find('id')
            if wiki_id == None:
                elem.clear()
                continue
            wiki_id = wiki_id.text
            revision = elem.find('revision')
            if revision != None:
                print(list(revision))
                text = revision.find('text').text
                print(text)
                if text != None:
                    count += 1
                    titles += title + '\n'
                    page = {'wiki_id': wiki_id, 'title': title, 'text': text.text}
                    pages += json.dumps(page, ensure_ascii=False) + '\n'
        elem.clear()

revision.find('text').text这行似乎找不到某些元素的文本,包括上面的元素,而有些元素占我数据的七分之一,这很烦人。对于其他一些条目的page-> id也是这种情况,其中它声称该元素根本不存在。我通过忽略那些问题来解决了这个问题,但是我真的不想这样做,而且这个错误对我来说根本没有意义。

这是另一页,完全正常。

<page>
    <title>Mustafa Suphi</title>
    <ns>0</ns>
    <id>22</id>
    <revision>
      <id>20077185</id>
      <parentid>20017115</parentid>
      <timestamp>2018-10-14T08:31:32Z</timestamp>
      <contributor>
        <username>Vikiçizer</username>
        <id>90501</id>
      </contributor>
      <comment>/* top */düzeltme  [[Vikipedi:AWB|AWB]] ile</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text xml:space="preserve">
          ...some Mustafa Suphi stuff...
      </text>
      <sha1>m5finh6h2kr8h2fbtmsatp5fhz1siwq</sha1>
    </revision>
  </page>

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您已经发布了两个示例:“工作”和“不工作”。

在“不工作”状态下,没有

</revision>

您确定这是您所拥有的XML还是仅仅是复制和粘贴错误。