我必须解析以下XML:
<reply xmlns="urn::ietf::param" xmlns:element="https://xml.example.net/abc/12.3"
message-id='1'>
<abc>
<xyz> hello </xyz>
</abc>
</reply>
我想要xyz节点的值,即hello,但findnodes返回null值。 我的代码是:
my $xpath=XML::LibXML::XPathContext->new($dom);
$xpath->registerNs('ns1','urn::ietf::param');
$xpath->registerNs('ns2','https://xml.example.net/abc/12.3');
$val=$xpath->findnodes('//ns1:reply/ns2:element/abc/xyz');
print $val;
但是print语句返回空值
答案 0 :(得分:2)
您似乎对名称空间的工作方式存在一些误解。 xmlns:element="https://xml.example.net/abc/12.3"
表示使用此特定命名空间URI定义了前缀element
。实际上,这个命名空间从未在您的XML中使用过。
xmlns="urn::ietf::param"
定义了默认名称空间,也适用于所有后代元素。
实际上,您的XML中没有<element/>
元素。
因此,以下XPath应该按预期工作:
//ns1:reply/ns1:abc/ns1:xyz