Python 按名称而不是索引查找xml节点
如何通过名称查找xml节点并在标记之间获取其值 我是这样做的:Python 按名称而不是索引查找xml节点,python,xml,dom,minidom,Python,Xml,Dom,Minidom,如何通过名称查找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].childNode
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>
更新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.toxml()
u'\n\n 0\n aaa\n bbb\n ccc\n'
但我如何获得价值呢?我试过这个:
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>'
dom.getElementsByTagName(“ns0:OAuthToken”)
[]
(Pdb)dom.getElementsByTagName(“ns0:OAuthToken”)[0]
(Pdb)dom.getElementsByTagName(“ns0:OAuthToken”)[0].nodeValue
(Pdb)dom.getElementsByTagName(“ns0:OAuthToken”)[0].toxml()
“AAAAA”
通常使用lxml
和xpath是Python中的常用方法
当您想要显式地使用minidom
时,您可以使用以下方法来获取特定标记的所有HTML元素
matches = dom.getElementsByTagName("foo")
for e in matches:
print(e.firstChild.nodeValue)
通常使用lxml
和xpath是Python中的常用方法
当您想要显式地使用minidom
时,您可以使用以下方法来获取特定标记的所有HTML元素
matches = dom.getElementsByTagName("foo")
for e in matches:
print(e.firstChild.nodeValue)
通常使用lxml
和xpath是Python中的常用方法
当您想要显式地使用minidom
时,您可以使用以下方法来获取特定标记的所有HTML元素
matches = dom.getElementsByTagName("foo")
for e in matches:
print(e.firstChild.nodeValue)
通常使用lxml
和xpath是Python中的常用方法
当您想要显式地使用minidom
时,您可以使用以下方法来获取特定标记的所有HTML元素
matches = dom.getElementsByTagName("foo")
for e in matches:
print(e.firstChild.nodeValue)
您需要使用,因为您没有名为ServerTime
的标记,您有一个名为{http://ccc.aaa.bbb/api/v1}ServerTime
(其中{http://ccc.aaa.bbb/api/v1}
指示默认名称空间。)
由于document元素的最后一个属性,此名称空间隐式添加到XML正文中的每个标记中:
<ReconnectResponse ... xmlns="http://ccc.aaa.bbb/api/v1">
您需要使用,因为您没有名为ServerTime的标记,您有一个名为{http://ccc.aaa.bbb/api/v1}ServerTime
(其中{http://ccc.aaa.bbb/api/v1}
指示默认名称空间。)
由于document元素的最后一个属性,此名称空间隐式添加到XML正文中的每个标记中:
<ReconnectResponse ... xmlns="http://ccc.aaa.bbb/api/v1">
您需要使用,因为您没有名为ServerTime的标记,您有一个名为{http://ccc.aaa.bbb/api/v1}ServerTime
(其中{http://ccc.aaa.bbb/api/v1}
指示默认名称空间。)
由于document元素的最后一个属性,此名称空间隐式添加到XML正文中的每个标记中:
<ReconnectResponse ... xmlns="http://ccc.aaa.bbb/api/v1">
您需要使用,因为您没有名为ServerTime的标记,您有一个名为{http://ccc.aaa.bbb/api/v1}ServerTime
(其中{http://ccc.aaa.bbb/api/v1}
指示默认名称空间。)
由于document元素的最后一个属性,此名称空间隐式添加到XML正文中的每个标记中:
<ReconnectResponse ... xmlns="http://ccc.aaa.bbb/api/v1">
通常xpath是非常标准的方法。您是否明确想要minidom
?或者您可以使用lxml
?看起来您使用的是elementtree——难道您不能使用root.find(tagname)
?@stanleyxu2005,minidom。通常xpath是非常标准的方法。您是否明确想要minidom
?或者您可以使用lxml
?看起来您使用的是elementtree——难道您不能使用root.find(tagname)
?@stanleyxu2005,minidom。通常xpath是非常标准的方法。您是否明确想要minidom
?或者您可以使用lxml
?看起来您使用的是elementtree——难道您不能使用root.find(tagname)
?@stanleyxu2005,minidom。通常xpath是非常标准的方法。您是否明确想要minidom
?或者您可以使用lxml
?它看起来像是在使用elementtree--您不能只使用root.find(标记名)
?@stanleyxu2005,minidom.实际上,dom.getElementsByTagName(“my_标记”)总是返回[]出于某些原因。@AlexanderSupertramp最好将您的xml内容粘贴到您的问题中。@AlexanderSupertramp我可以得到预期的“aaa”结果。实际上,dom.getElementsByTagName(“my_标记”)总是返回[]出于某些原因。@AlexanderSupertramp最好将您的xml内容粘贴到您的问题中。@AlexanderSupertramp我可以得到预期的“aaa”结果。实际上,dom.getElementsByTagName(“my_标记”)总是返回[]出于某些原因。@AlexanderSupertramp最好将您的xml内容粘贴到您的问题中。@AlexanderSupertramp我可以得到预期的“aaa”结果。实际上,dom.getElementsByTagName(“my_标记”)总是返回[]出于某些原因。@AlexanderSupertramp最好将您的xml内容粘贴到您的问题中。@AlexanderSupertramp我可以得到预期的“aaa”结果。我可以确认它在没有名称空间的情况下也可以工作。这可能取决于您的Python/lxml/ET/minidom版本,因为它在没有名称空间的情况下对我不起作用。如果不使用dom.getElementsByTagnames()
,我会得到一个空列表,就像OP一样。请参见示例。感谢您的回复。很高兴知道。我可以确认它在没有名称空间的情况下也可以工作。这可能取决于您的Python/lxml/ET/minidom版本,因为它在没有名称空间的情况下无法工作。如果不使用dom.getElementsByTagnames()
,我会得到一个空列表,就像OP一样。请参见示例。感谢您的回复。很高兴知道。我可以确认它在没有名称空间的情况下也可以工作。这可能取决于您的Python/lxml/ET/minidom版本,因为它在没有名称空间的情况下无法工作。如果不使用dom.getElementsByTagnames()
,我会得到一个空列表,就像OP一样。请参见示例。感谢您的回复。很高兴知道。我可以确认它在没有名称空间的情况下也可以工作。这可能取决于您的Python/lxml/ET/minidom版本,因为它在没有名称空间的情况下无法工作。不使用dom.getEle