【问题标题】:how to get direct child nodes not sub-child nodes with same tag name xml minidom python如何获取直接子节点而不是具有相同标签名称的子子节点xml minidom python
【发布时间】:2014-05-20 12:08:47
【问题描述】:

我使用 xml minidom 从 xml 文件中获取一些数据,但无法获得期望的结果...尝试该站点上与 xml minidom 相关的许多代码但失败..这是我的示例 xml 文件..

<computer>
    <parts>
        <text>Required</text>
    </parts>
    <parts>
        <text>Required</text>
        <parts>
            <text>?Not Required</text>
        </parts>
        <parts>
            <text>?Not Required</text>
        </parts>
    </parts>
    <parts>
        <text>Required</text>
        <parts>
            <text>Not Required</text>
        </parts>
    </parts>
    <parts>
        <text>Required</text>
   </parts>
</computer>

我想得到“必需”的文本,但得到这样的输出

Required
Required
Not Required
Not Required
Required
Not Required
Required

这是我的代码示例,它从文件中获取所有文本,但我需要在这些标签中的文本是父标签的直接子标签...

from xml.dom import minidom
file=('d:\sample.xml')
xmldoc=minidom.parse(file)
parentnode = xmldoc.getElementsByTagName('computer')
for node in parentnode:
    alist=node.getElementsByTagName('text')
    for a in alist:
        t=a.childNodes[0].nodeValue
        print authortext

我想要的输出

Required
Required
Required
Required

【问题讨论】:

  • getElementsByTagName 获取所有后代。你需要所有的孩子
  • 我需要它的所有直系后代而不是间接后代......你可以说我需要父亲孩子的名字而不是他孙子名字的名字......

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


【解决方案1】:

除非您的实际 XML 要复杂得多,否则您可以导航 DOM 树并从 parts 子节点中的 text 子节点获取您想要的子节点,这些子节点是 computer 的子节点:

import xml.dom.minidom

file=('sample.xml')
xmldoc=xml.dom.minidom.parse(file)
computerNode = xmldoc.getElementsByTagName('computer')
for computerChild in computerNode:
    for parts in computerChild.childNodes:
       for partsChild in parts.childNodes:
          if partsChild.nodeType == xml.dom.Node.ELEMENT_NODE: 
             if partsChild.tagName == 'text':
                print partsChild.childNodes[0].nodeValue

要使用我之前建议的 XPath,以及更简单的 DOM 导航,最好使用Element Tree API

【讨论】:

  • 要使用它,您需要上面链接的 dom-xpath 模块。你需要在你的系统中安装模块(下载包,解压,进入目录,运行python setup.py install)。模块安装好后,你的程序会找到并运行。
  • 我已经使用 easy_install 安装了 py-dom-xpath,但我给出了 XPathParseError 之类的错误:语法错误:/computer/parts/text
  • 这可能是一个错误,因为它适用于我的安装 (Mac)。无论如何,要使用 XPath,最好按照我在上面链接中的建议使用 etree。我使用应该可以工作的纯 DOM 修复了您的代码。
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多