2012-03-23 64 views
0

试图找到“老化定时器”的下面的XML文档中的值:的XPath查找位置

<ospf3-database-information xmlns="http://xml.juniper.net/junos/11.1R2/junos-routing"> 
    <ospf3-database external-heading="OSPF3"> 
     <lsa-type>Extern</lsa-type> 
     <lsa-id>0.0.0.1</lsa-id> 
     <advertising-router>172.27.255.6</advertising-router> 
     <sequence-number>0x80000001</sequence-number> 
     <age>1792</age> 
     <checksum>0x90bd</checksum> 
     <lsa-length>28</lsa-length> 
     <ospf3-external-lsa> 
      <ospf3-prefix>::/0</ospf3-prefix> 
      <ospf3-prefix-options>0x0</ospf3-prefix-options> 
      <type-value>1</type-value> 
      <metric>0</metric> 
     </ospf3-external-lsa> 
     <ospf-database-extensive> 
      <aging-timer junos:seconds="1808"> 
       00:30:08 
      </aging-timer> 
      <installation-time junos:seconds="1790"> 
       00:29:50 
      </installation-time> 
      <expiration-time junos:seconds="1808"> 
       00:30:08 
      </expiration-time> 
      <send-time junos:seconds="1790"> 
       00:29:50 
      </send-time> 
      <lsa-changed-time junos:seconds="1790"> 
       00:29:50 
      </lsa-changed-time> 
      <lsa-change-count>1</lsa-change-count> 
     </ospf-database-extensive> 
    </ospf3-database> 
</ospf3-database-information> 

唯一需要注意的是,我只是想,如果“多个命令前缀”具有文本::/0。 我想这个XPath:

//x:ospf3-external-lsa[x:ospf3-prefix=\"::/0\"]/ancestor::x:ospf3-database/x:ospf-database-extensive/x:aging-timer 

使用x来处理在Perl命名空间:

my $xdatav6 = XML::LibXML->load_xml(string => $defv6); 
    my $dataxv6 = XML::LibXML::XPathContext->new($xdatav6); 
    $dataxv6->registerNs("x", "http://xml.juniper.net/junos/11.1R2/junos-routing"); 

但这并不工作,似乎当我用祖先它可以抓住一切,除了“ospf-database-extensive”树下的任何东西。

+0

试图找到什么值? – 2012-03-23 18:44:19

+0

对不起,我添加了一个编辑。老化计时器的价值。 – salparadise 2012-03-23 18:47:36

+1

我没有发现任何明显的错误 - 你的意思是说你已经做了一些调试 - 具体你可以确定:(1)// x:ospf3-external-lsa [x:ospf3-prefix = \ “::/0 \”]选择正确的节点; (2)ancestor :: x:ospf3-database选择正确的节点,但是(3)它然后未能找到子ospf-database-extensive节点? – 2012-03-23 18:55:45

回答

1

您显示的XML无效,因为它没有用于junos:secondsjunos名称空间的URI。我将根标签更改为

xmlns:junos="http://xml.juniper.net/junos/11.1R2/junos-routing" 

使事情正常工作。

这是我见过的最长的XPath表达式,但这个伎俩!根据需要放入适当的名称空间前缀。

/ospf3-database-information/ospf3-database[ospf3-external-lsa/ospf3-prefix="::/0"]/ospf-database-extensive/aging-timer