我有一个 xml 文档,看起来像这样
<MyXmlRoot>
<App xmlns='urn:SomethingSomething1'>
...
</App>
<User xmlns='urn:SomethingSomething2'>
...
</User>
<Doc xmlns='urn:SomethingSomething3'>
<level2>
<level3>
<level4>
<level5>
<level6>
<level7>
<level8>
<level9>
<level10>Content at the deepest level</level10>
</level9>
</level8>
</level7>
</level6>
</level5>
</level4>
</level3>
</level2>
</Doc>
我使用lxml来读取它并像这样解析它
tree = etree.parse("textxml.xml")
root = tree.getroot()
如果我从 root 进行漂亮的打印,它将显示整个 xml。这很好,但是当我尝试像这样读取特定标签值时
content = root.xpath('//level10/text()')
xpath 在根目录下找不到任何标签并返回空列表 我怀疑这是因为名称空间,但找不到使 xpath 读取值的解决方案 有什么建议吗?
将 xmlns
{urn:SomethingSomething3}
添加到要搜索的标签中:
from lxml import etree
xml_data = """
<MyXmlRoot>
<App xmlns='urn:SomethingSomething1'>
</App>
<User xmlns='urn:SomethingSomething2'>
</User>
<Doc xmlns='urn:SomethingSomething3'>
<level2>
<level3>
<level4>
<level5>
<level6>
<level7>
<level8>
<level9>
<level10>Content at the deepest level</level10>
</level9>
</level8>
</level7>
</level6>
</level5>
</level4>
</level3>
</level2>
</Doc>
</MyXmlRoot>
"""
root = etree.fromstring(xml_data)
level10_text = root.find(".//{urn:SomethingSomething3}level10").text
print("Text from <level10> tag:", level10_text)
打印:
Text from <level10> tag: Content at the deepest level