【发布时间】:2012-04-08 08:14:07
【问题描述】:
尝试在以下 XML 文档中查找“aging-timer”的值:
<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>
唯一需要注意的是,如果“ospf3-prefix”的文本为 ::/0,我只需要它。 我正在尝试这个 xpath:
//x:ospf3-external-lsa[x:ospf3-prefix=\"::/0\"]/ancestor::x:ospf3-database/x:ospf-database-extensive/x:aging-timer
在 perl 中使用 x 处理命名空间:
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”树下的任何内容之外的所有内容。
【问题讨论】:
-
试图找到什么值?
-
抱歉,我添加了一个编辑。老化计时器的值。
-
我没有看到任何明显的错误——你有点暗示你已经做了一些调试——特别是你确定:(1) //x:ospf3-external-lsa[ x:ospf3-prefix=\"::/0\"] 正在选择正确的节点; (2) 祖先::x:ospf3-database 选择了正确的节点,但 (3) 然后找不到子 ospf-database-extensive 节点?
-
是的,如果我有以下路径:"//x:ospf3-external-lsa[x:ospf3-prefix=\"::/0\"]/ancestor::x:ospf3 -database/x:ospf3-external-lsa/x:type-value",它正确打印 1
-
好的,刚刚又运行了一次,看来我没有在文档中得到完整的响应。
标签: perl xpath xml-parsing