简体   繁体   English

python xpath返回空列表

[英]python xpath returning empty list

I've read through a ton of threads on xpath & lxml, but I still seem to missing something with regards to the following xml. 我已经阅读了有关xpath和lxml的大量线程,但是对于以下xml我仍然似乎缺少一些东西。

I need to pull the 'rt-entry' item, along with the information under it. 我需要提取“ rt-entry”项及其下的信息。

I am trying the following in python: 我在python中尝试以下内容:

from lxml import etree

x="""
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/12.3R5/junos">
    <route-information xmlns="http://xml.juniper.net/junos/12.3R5/junos-routing">
        <route-table>
            <table-name>x.inet.0</table-name>
            <destination-count>4990</destination-count>
            <total-route-count>51326</total-route-count>
            <active-route-count>4990</active-route-count>
            <holddown-route-count>0</holddown-route-count>
            <hidden-route-count>0</hidden-route-count>
            <rt junos:style="detail">
                <rt-destination>x.x.x.x</rt-destination>
                <rt-prefix-length>14</rt-prefix-length>
                <rt-entry-count junos:format="2 entries">2</rt-entry-count>
                <rt-announced-count>1</rt-announced-count>
                <tsi junos:indent="0">
                    KRT in-kernel x.x.x.x/x -> {indirect(x)}
                    Page 0 idx 0 Type 1 val b4557d8
                        Flags: Nexthop Change
                        Nexthop: Self
                        Localpref: 100
                        AS path: [x] I
                    Path x.x.x.x from x.x.x.x Vector len 4.  Val: 0
                </tsi>
                <rt-entry>
                    <active-tag>*</active-tag>
                    <current-active/>
                    <last-active/>
                    <protocol-name>BGP</protocol-name>
                    <preference>170</preference>
                    <preference2>-101</preference2>
                    <nh-type>Indirect</nh-type>
                    <nh-address>x</nh-address>
                    <nh-reference-count>123</nh-reference-count>
                    <nh-kernel-id>0</nh-kernel-id>
                    <gateway>x.x.x.x</gateway>
                    <nh-type>Router</nh-type>
                    <nh-index>1538</nh-index>
                    <nh junos:indent="16">
                        <nh-string>Next hop</nh-string>
                        <to>x.x.x.x</to>
                        <via>x.x</via>
                        <selected-next-hop/>
                        <session>63</session>
                    </nh>
                    <protocol-nh junos:indent="16">
                        <to>x.x.x.x</to>
                        <indirect-nh>bac2c40 1048576 INH Session ID: 0xa7</indirect-nh>
                    </protocol-nh>
                    <rt-entry-state>Active Int Ext</rt-entry-state>
                    <peer-as>x</peer-as>
                    <announce-bits>3</announce-bits>
                    <announce-tasks>0-KRT 2-BGP_RT_Background 3-Resolve tree 7 </announce-tasks>
                    <as-path>AS path: I
                    </as-path>
                    <bgp-rt-flag>Accepted</bgp-rt-flag>
                    <local-preference>100</local-preference>
                    <peer-id>x.x.x.x</peer-id>
                    <indirect-nh-count>1</indirect-nh-count>
                    <protocol-nh junos:indent="24">
                        <to>x.x.x.x</to>
                        <indirect-nh>bac2c40 1048576 INH Session ID: 0xa7</indirect-nh>
                        <forwarding-nh-count>1</forwarding-nh-count>
                        <nh-type>Router</nh-type>
                        <nh-index>1538</nh-index>
                        <nh junos:indent="8">
                            <nh-string>Next hop</nh-string>
                            <to>x.x.x.x</to>
                            <via>x.x</via>
                            <session>63</session>
                        </nh>
                        <output>
                                        x.x.x.x/x Originating RIB: x.inet.0
                                          Node path count: 1
                                          Forwarding nexthops: 1
                                            Next hop type: Interface
                                            Nexthop: via x.x
                        </output>
                    </protocol-nh>
                </rt-entry>
            </rt>
        </route-table>
    </route-information>
    <cli>
        <banner>{master}</banner>
    </cli>
</rpc-reply>
"""

root=etree.fromstring(x)
print(root.xpath('//rt-entry[current-active]'))

However, I receive an empty list. 但是,我收到一个空列表。 Either my xpath is wrong, or I am using lxml incorrectly. 我的xpath错误,或者我使用的lxml错误。

Any help is appreciated. 任何帮助表示赞赏。

Try to use namespace prefixes: 尝试使用名称空间前缀:

print (root.xpath('//junos-routing:rt-entry',namespaces={"junos-routing":"http://xml.juniper.net/junos/12.3R5/junos-routing"}))

ref: http://lxml.de/xpathxslt.html 参考: http : //lxml.de/xpathxslt.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM