在 Perl 客户端应用程序中解析 NETCONF 服务器响应
在 NETCONF Perl 客户端应用程序中,在与 NETCONF 服务器建立连接后,客户端应用程序可以通过调用 Perl 方法提交一个或多个请求。NETCONF 服务器返回 <rpc-reply>
元素中的相应信息。有两种方法可以解析 NETCONF 服务器的响应:
通过使用 XML::LibXML::D OM 的函数
通过使用 XML::LibXML::XPATHContext 的函数
在 Junos OS 16.1 版之前,每个 Junos OS 版本都包含一个与版本相关的新 NETCONF Perl 客户端版本。从 Junos OS 16.1 版开始,NETCONF Perl 客户端独立于版本,托管在 GitHub 和 CPAN 上,并且可以管理运行任何版本的 Junos OS 版本的设备。NETCONF Perl 客户端的与版本无关的版本不包括 Net::Netconf::Transform
与版本相关的客户端版本中存在的模块。
例如,请考虑来自 NETCONF 服务器的以下回复:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/16.1R1/junos" message-id='3'> <chassis-inventory xmlns="http://xml.juniper.net/junos/16.1R1/junos-chassis"> <chassis style="inventory"> <name>Chassis</name> <serial-number>G1234</serial-number> <description>MX80-48T</description> ... </chassis> </chassis-inventory> </rpc-reply>
假设用户想要解析响应并检索元素的 <serial-number>
值。
以下代码用于 XML::LibXMl::DOM
检索该值。该示例将响应存储在一个变量中,并调用的 DOM
方法来分析响应。
my $query = "get_chassis_inventory"; my $res = $jnx->$query(); my $rpc = $jnx->get_dom(); my $serial = $rpc->getElementsByTagName("serial-number")->item(0)->getFirstChild->getData; print ("\nserial number: $serial");
以下代码用于 XML::LibXML::XPATHContext
检索该值。该示例将响应存储在一个变量中,并调用 XPathContext
方法来检索该值。该 local-name()
函数返回不带命名空间的元素名称。为了提高可读性,XPATH 表达式出现在多行上。
my $query = "get_chassis_inventory"; my $res = $jnx->$query(); my $rpc= $jnx->get_dom(); my $xpc = XML::LibXML::XPathContext->new($rpc); my $serial=$xpc->findvalue(' /*[local-name()="rpc-reply"] /*[local-name()="chassis-inventory"] /*[local-name()="chassis"] /*[local-name()="serial-number"]'); print ("\nserial number: $serial");
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能浏览器 查看您使用的平台是否支持某项功能。