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 ノードの値、つまり 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ステートメントはnull値を返しています

4

1 に答える 1

2

名前空間の仕組みについて誤解しているようです。この特定の名前空間 URI で定義されxmlns:element="https://xml.example.net/abc/12.3"たプレフィックスがあることを意味します。elementこの名前空間は、実際には XML で使用されることはありません。

xmlns="urn::ietf::param"デフォルトの名前空間を定義し、すべての子孫要素にも適用されます。<element/>実際、XML には要素がありません。

したがって、次の XPath は期待どおりに機能するはずです。

//ns1:reply/ns1:abc/ns1:xyz
于 2014-04-08T12:13:17.497 に答える