在 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");
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能浏览器 查看您使用的平台是否支持某项功能。