python xml minidom获取包含子项和文本的childnode的完整内容

时间:2016-04-25 13:57:41

标签: python xml python-3.x xml-parsing minidom

我正在寻找使用xml minidom提取xml文件的内容,以下是示例:

<parent>
   <child>
        text1 
        <subchild>text2 </subchild> 
        text3
   </child>
</parent>

以下代码仅提取&#39; text1&#39;:

  DOMTree = xml.dom.minidom.parse('file.xml')
  document = DOMTree.documentElement
  parents = document.getElementsByTagName('parent')
  for parent in parents:
    child = parents.getElementsByTagName('parent')[0]
    print(child.childNodes[0].nodeValue) # shows text1

我可以 text1 text2 但不能 text3
请问如何获取子元素子元素 text1 text2 text3 )的完整内容?

1 个答案:

答案 0 :(得分:1)

迭代子节点并在.data对象时获取Text属性,否则获取firstChild.nodeValue

print([node.data.strip() if isinstance(node, xml.dom.minidom.Text) else node.firstChild.nodeValue
       for node in child.childNodes])

打印['text1', 'text2 ', 'text3']

我会考虑切换到比minidom库更直接,易用和理解的东西。例如,看看BeautifulSoup中的xml mode是多么容易:

>>> from bs4 import BeautifulSoup
>>> data = """
... <parent>
...    <child>
...         text1 
...         <subchild>text2 </subchild> 
...         text3
...    </child>
... </parent>
... """
>>> soup = BeautifulSoup(data, "xml")
>>> print(soup.child.get_text())

        text1 
        text2  
        text3