【问题标题】:Python minidom xml parsing to get the value of first child nodePython minidom xml解析获取第一个子节点的值
【发布时间】:2013-03-28 10:45:21
【问题描述】:

我正在使用 python minidom 解析 xml,但无法使其在 xml 以下工作。我想选择第一个服务器标签并想要 name 标签的值,在本例中为“Server1”

<class>
<name>MyClass</name>
<security>
<name>MyClass</name>
</security>
<server>
<name>Server1</name>
<ssl>
 <name>Server1</name>
</ssl>
<server-info>
 <name>Server1</name>
</server-info>
</server>
<server>
<name>Server2</name>
<ssl>
 <name>Server2</name>
</ssl>
<server-info>
 <name>Server2</name>
</server-info>
</server>
<server>
<name>Server3</name>
<ssl>
 <name>Server3</name>
</ssl>
<server-info>
 <name>Server3</name>
</server-info>
</server>
</class>

【问题讨论】:

  • 您有什么理由不使用ElementTree API 代替吗?
  • 我们的服务器在 python 2.4 上运行,我们想要一些内置的东西
  • 这是一个正当的理由,但我会尽快升级服务器; 2.4 相当古老。
  • 是的!一切都取决于我的雇主,我需要在大约 100 台服务器上运行它,而且都只是这样。我认为它不会很快发生

标签: python xml minidom


【解决方案1】:

您必须引用 XML DOM documentation 并咬紧牙关。

要获取第一个 &lt;server&gt; 元素,然后是其 &lt;name&gt;

from xml.dom import minidom

document = minidom.parse(inputfilename)

def findChildNodeByName(parent, name):
    for node in parent.childNodes:
        if node.nodeType == node.ELEMENT_NODE and node.localName == name:
            return node
    return None

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)

# Get the first of all `<server>` nodes
server = document.getElementsByTagName('server')[0]

# Get the first child node that is a `<name>` element
name = findChildNodeByName(server, 'name')
if name is not None:
    print getText(name.childNodes)

【讨论】:

  • 每次刷新都会改进 :)
  • @DevC:如果可能的话,我倾向于避免 minidom,我的 DOM 技能已经生疏了,我一直在回忆一些技巧。它有been a while,因为我必须认真处理标准。
  • 下一部分出了点问题,要么是缩进,要么是别的什么。..gotcha next 不在 python 2.4 中
  • 2012 年 Plone Metrics 年度人物 .. 我不知道我在和谁说话.. 非常尊重... 我喜欢开源并深深尊重所有为它做出贡献的人
猜你喜欢
  • 1970-01-01
  • 2014-08-24
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2015-05-31
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多