簡體   English   中英

lxml:元素上的XPath和名稱空間

[英]lxml: XPath and namespaces on an element

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM