1

我必须解析以下 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 节点的值,即你好,但 findnodes 返回空值。我的代码是:

 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;

但打印语句返回空值

4

1 回答 1

2

看起来您对命名空间的工作方式有一些误解。xmlns:element="https://xml.example.net/abc/12.3"意味着有一个element用这个特定的命名空间 URI 定义的前缀。这个命名空间实际上从未在您的 XML 中使用。

xmlns="urn::ietf::param"定义了一个默认命名空间,也适用于所有后代元素。实际上,您的 XML 中没有<element/>元素。

因此,以下 XPath 应该按预期工作:

//ns1:reply/ns1:abc/ns1:xyz
于 2014-04-08T12:13:17.497 回答