Python lxml:元素上的XPath和名称空间

Python lxml:元素上的XPath和名称空间,python,xml,xpath,lxml,xml-namespaces,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-d

我在使用返回空列表的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>

1.
xxx.00-00
0xc2d6
0xe1d1
2.
yyy.00-00
0x419e
0x1f24
{master}
这是我做的查询,也是基于stack overflow中的相关问题

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]: []
[71]中的
:docs=etree.fromstring(xxx)
在[72]中:文档
出[72]:
[73]:docs.xpath(//isis数据库信息/isis数据库[level='2']/isis数据库条目)
Out[73]:[]
In[74]:文档[0]
出[74]:
在[76]:docs.xpath(“//j:isis数据库信息/j:isis数据库[level='2']]/j:isis数据库条目”中,名称空间={“j”:”http://xml.juniper.net/junos/1
…:5.1X22/junos路由“})
Out[76]:[]
我无法理解名称空间和路径是如何协同工作的。
你能告诉我我做错了什么吗?

看起来你只是缺少了
级别上的
j
前缀

//j:isis数据库信息/j:isis数据库[j:level='2']/j:isis数据库条目

看起来您只是缺少了
级别上的
j
前缀

//j:isis数据库信息/j:isis数据库[j:level='2']/j:isis数据库条目

请参见此处了解一般名称空间:请参见此处了解lxml中的名称空间:请参见此处了解一般名称空间:请参见此处了解lxml中的名称空间: