lxml xpass 在 xml 中找不到第一个标签下方的标签

问题描述 投票:0回答:1

我有一个 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 读取值的解决方案 有什么建议吗?

python xml lxml
1个回答
0
投票

将 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
© www.soinside.com 2019 - 2024. All rights reserved.