Python 使用ElementTree解析具有命名空间的XML字符串
我用谷歌搜索了一下我的裤子,结果一无所获。我尝试做的很简单:我想使用ElementTree访问字符串中包含的以下XML中的UniqueID值Python 使用ElementTree解析具有命名空间的XML字符串,python,xml,elementtree,Python,Xml,Elementtree,我用谷歌搜索了一下我的裤子,结果一无所获。我尝试做的很简单:我想使用ElementTree访问字符串中包含的以下XML中的UniqueID值 from xml.etree.ElementTree import fromstring xml_string = """<ListObjectsResponse xmlns='http://www.example.com/dir/'> <Item> <UniqueID>
from xml.etree.ElementTree import fromstring
xml_string = """<ListObjectsResponse xmlns='http://www.example.com/dir/'>
<Item>
<UniqueID>abcdefghijklmnopqrstuvwxyz0123456789</UniqueID>
</Item>
</ListObjectsResponse>"""
NS = "http://www.example.com/dir/"
tree = fromstring(xml_string)
from xml.etree.ElementTree导入fromstring
xml_string=“”
abcdefghijklmnopqrstuvwxyz0123456789
"""
NS=”http://www.example.com/dir/"
tree=fromstring(xml\u字符串)
我知道我应该使用fromstring
方法来解析XML字符串,但我似乎无法确定如何访问UniqueID。我不确定如何对命名空间使用find
、findall
或findtext
方法
非常感谢您的帮助。以下几点可以帮助您:
>>> tree.findall('*/*')
[<Element '{http://www.example.com/dir/}UniqueID' at 0x10899e450>]
或者,您可以通过指定某个精确的元素来直接查找该元素:
>>tree.find({{{0}}}项/{{{0}}}UniqueID.format(NS))#标记的前缀是NS
正如Tomalak指出的,可能包含有用的信息;您想检查如何处理前缀:事实上,处理前缀的方法可能比在上面的方法中显式显示
NS
路径更简单。我知道,作为报复,我的答案会有一些恐惧和反对票,因为我使用modulere来分析XML字符串,但请注意:
- 在大多数情况下,以下解决方案不会导致任何问题
- 我希望下层选民能举出一些案例,说明我的解决方案存在问题
- 我不解析字符串,取“parse”这个词的意思是“在分析树之前获取一棵树以找到搜索的内容”;我分析它:我直接找到文本的whished部分
import re
xml_string = """<ListObjectsResponse xmlns='http://www.example.com/dir/'>
<Item>
<UniqueID>abcdefghijklmnopqrstuvwxyz0123456789</UniqueID>
</Item>
</ListObjectsResponse>"""
print xml_string
print '\n=================================\n'
print re.search('<UniqueID>(.+?)</UniqueID>', xml_string, re.DOTALL).group(1)
重新导入
xml_string=“”
abcdefghijklmnopqrstuvwxyz0123456789
"""
打印xml_字符串
打印“\n==========================================================\n”
打印搜索(“(.+?)”,xml_字符串,re.DOTALL).group(1)
结果
<ListObjectsResponse xmlns='http://www.example.com/dir/'>
<Item>
<UniqueID>abcdefghijklmnopqrstuvwxyz0123456789</UniqueID>
</Item>
</ListObjectsResponse>
=================================
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
=================================
abcdefghijklmnopqrstuvwxyz0123456789
你用谷歌搜索了你的裤子?搜索“ElementTree find namespace”的第二个结果是:我阅读了整个内容。恐怕我还是不太理解它来帮助解决我的困境。@Raj我也很少完全理解effobot网站上的解释谢谢你的例子。在这种情况下,如何打印实际的UniqueID?@Raj:我添加了显示如何获取UniqueID元素内容的代码。+1:这种方法在某些情况下确实非常好。Is还具有非常清晰的优点(搜索文本的格式非常明显)。import reeeeee
import re
xml_string = """<ListObjectsResponse xmlns='http://www.example.com/dir/'>
<Item>
<UniqueID>abcdefghijklmnopqrstuvwxyz0123456789</UniqueID>
</Item>
</ListObjectsResponse>"""
print xml_string
print '\n=================================\n'
print re.search('<UniqueID>(.+?)</UniqueID>', xml_string, re.DOTALL).group(1)
<ListObjectsResponse xmlns='http://www.example.com/dir/'>
<Item>
<UniqueID>abcdefghijklmnopqrstuvwxyz0123456789</UniqueID>
</Item>
</ListObjectsResponse>
=================================
abcdefghijklmnopqrstuvwxyz0123456789