【发布时间】:2014-12-18 19:24:38
【问题描述】:
如何通过名称找到 xml 节点并在标签之间获取其值?
我是这样做的:
from xml.dom import minidom
dom = minidom.parseString(ET.tostring(ET.fromstring(some_xml), "utf-8"))
self.a1 = dom.childNodes[0].childNodes[4].childNodes[0].nodeValue
self.a2 = dom.childNodes[0].childNodes[5].childNodes[0].nodeValue
我想使用标签的名称而不是使用它在数组childNodes 中的索引来做到这一点。怎么样?
更新:
<ReconnectResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ccc.aaa.bbb/api/v1">
<ErrorMessage />
<ErrorCode>0</ErrorCode>
<ServerTime>aaa</ServerTime>
<OAuthToken>bbb</OAuthToken>
<OAuthTokenSecret>ccc</OAuthTokenSecret>
</ReconnectResponse>
和代码:
dom.getElementsByTagName("ServerTime") # => []
更新2
dom.toxml()
u'<?xml version="1.0" ?><ns0:ReconnectResponse xmlns:ns0="http://ccc.aaa.bbb/api/v1">\n <ns0:ErrorMessage/>\n <ns0:ErrorCode>0</ns0:ErrorCode>\n <ns0:ServerTime>aaa</ns0:ServerTime>\n <ns0:OAuthToken>bbb</ns0:OAuthToken>\n <ns0:OAuthTokenSecret>ccc</ns0:OAuthTokenSecret>\n</ns0:ReconnectResponse>'
但我如何获得价值?我试过这个:
dom.getElementsByTagName("ns0:OAuthToken")
[<DOM Element: ns0:OAuthToken at 0x10635a878>]
(Pdb) dom.getElementsByTagName("ns0:OAuthToken")[0]
<DOM Element: ns0:OAuthToken at 0x10635a878>
(Pdb) dom.getElementsByTagName("ns0:OAuthToken")[0].nodeValue
(Pdb) dom.getElementsByTagName("ns0:OAuthToken")[0].toxml()
u'<ns0:OAuthToken>aaaaaa</ns0:OAuthToken>'
【问题讨论】:
-
通常 xpath 是非常标准的方法。你明确想要
minidom吗?或者你可以使用lxml吗? -
看起来你正在使用 elementtree -- 你不能只是
root.find(tagname)吗? -
@stanleyxu2005, minidom。