首页 > 解决方案 > 在动态树中使用 minidom 获取标签值

问题描述

我有一个 xml 文件,它在某些深层级别中每次都没有相同的标签。

例如,这是xml结构的一部分,<openie>位于

root > document > sentences > sentence > openie

我想从<text>每个标签中获取值sentence

<openie>
  <triple confidence="1.000">
    <subject begin="1" end="2">
      <text>customer</text>
      <lemma>customer</lemma>
    </subject>
    <relation begin="2" end="3">
      <text>enters</text>
      <lemma>enter</lemma>
    </relation>
    <object begin="3" end="6">
      <text>their order number</text>
      <lemma>they order number</lemma>
    </object>
  </triple>
</openie>

我已经开始使用这种方法,但我被困在 XML 有不同标签的地方,即。subject,relationobject. 并且每个中的结构都openie可以改变,例如可以有一些其他的标签以及我提到的这三个标签,它也可以有<text>标签。

from xml.dom import minidom

def parse_xml():
    xmldoc = minidom.parse('./tmp/nlp_output.xml')
    sentencesNode = xmldoc.getElementsByTagName('sentences')
    for sentenceNode in sentencesNode:
        for openIeNode in sentenceNode.childNodes:
            for tripleNode in openIeNode.childNodes:
              #what now?

标签: pythonxml-parsingminidom

解决方案


在您的问题需要的背景下,即

  • 我想从每个句子的<text>标签中获取值?

不需要每次都保留或子节点trackdifferent tags这是简单的解决方法:

from xml.dom import minidom
xml_doc = minidom.parse('./tmp/nlp_output.xml')

#  To get Number of available tags, you want to search :
item_list = xml_doc.getElementsByTagName('text')
print("Number of text-tags:", len(item_list), '\n')

for text_Elem in item_list:
    text_value = ''.join([node.data for node in text_Elem.childNodes])
    print('Required Value:', text_value)

通过使用这种技术,您将获得Exact tag value as required 在您的情况下。要详细了解 XML 解析,请访问参考:How-to-Parse-XML-in-Python


这是给定 XML 文件的输出nlp_output.xml,即

 - Number of text-tags: 3 

 - Required Value: customer

 - Required Value: enters 

 - Required Value: their order number

推荐阅读