python - lxml:元素上的 XPath 和命名空间

标签 python xml xpath lxml xml-namespaces

我在使用 XPath 查询时遇到问题,该查询返回空列表作为结果。

更具体地说,XML 文档如下:

<rpc-reply xmlns:junos="http://xml.juniper.net/junos/15.1X22/junos">
    <isis-database-information xmlns="http://xml.juniper.net/junos/15.1X22/junos-routing" junos:style="detail">
        <isis-database>
            <level>1</level>
            <isis-database-entry>
                <lsp-id>xxx.00-00</lsp-id>
                <sequence-number>0xc2d6</sequence-number>
                <checksum>0xe1d1</checksum>
            </isis-database-entry>
        </isis-database>
        <isis-database>
            <level>2</level>
            <isis-database-entry>
                <lsp-id>yyy.00-00</lsp-id>
                <sequence-number>0x419e</sequence-number>
                <checksum>0x1f24</checksum>
            </isis-database-entry>
        </isis-database>
    </isis-database-information>
    <cli>
        <banner>{master}</banner>
    </cli>
</rpc-reply>

这是我所做的查询,也基于堆栈溢出中的相关问题,

In [71]: docs = etree.fromstring(xxx)                                                                                                                 

In [72]: docs                                                                                                                                         
Out[72]: <Element rpc-reply at 0x7fc2e4c5eac8>

In [73]: docs.xpath("//isis-database-information/isis-database[level='2']/isis-database-entry")                                                       
Out[73]: []

In [74]: docs[0]                                                                                                                                      
Out[74]: <Element {http://xml.juniper.net/junos/15.1X22/junos-routing}isis-database-information at 0x7fc2e5876288>

In [76]: docs.xpath("//j:isis-database-information/j:isis-database[level='2']/j:isis-database-entry", namespaces={"j": "http://xml.juniper.net/junos/1
    ...: 5.1X22/junos-routing"})                                                                                                                      
Out[76]: []

我无法理解命名空间和路径如何一起发挥作用。 你能建议并告诉我我做错了什么吗?

最佳答案

看起来您只是缺少 level 上的 j 前缀...

//j:isis-database-information/j:isis-database[j:level='2']/j:isis-database-entry

关于python - lxml:元素上的 XPath 和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378115/

相关文章:

xpath - 我们如何确定XPath表达式是否导致节点集?

python - 如何将 bools 的 numpy 记录数组转换为整数以计算协方差?

python - 防止 okay QPushButton 在按回车时接受对话框

python - 将圆投影到正方形上?

php - 不是有效的 AllXsd 值

java - 如何使用 XMLDog 从 xml 文件中检索值

python - 测试函数或方法是正常还是异步

php - 尝试在 magento 中创建自定义 block

xml - 如何在这里使用 XPath contains()?

vb.net - 查找没有属性的元素