私は以下のXMLを持っています。XpathはXML :: Twig :: XPath :: Eltと連携していません
<Path>
<To>
<My>
<Node key="11">
<ChildA>1A</ChildA>
<ChildB key="Key1">1B</ChildB>
<ChildC>
<ChildD>ValD</ChildD>
</ChildC>
</Node>
<Node key="22">
<ChildA>2A</ChildA>
<ChildB key="Key2">2B</ChildB>
<ChildC>
<ChildD>ValD</ChildD>
</ChildC>
</Node>
</My>
</To>
</Path>
そして、このXMLをXML :: Twig :: XPathを使用して解析しようとしています。 これは、XPath構文を使用して解析し、そこから要素を抽出するコードです。
use 5.010;
use strict;
use warnings FATAL => 'all';
use XML::Twig::XPath; #Issue with this shit as this thing was up to data but XML::XPath was not installed. So I did cpanm XML::XPath
use XML::Twig;
use Data::Dumper;
my @xml;
$xml[0] = q|<Path>
<To>
<My>
<Node key="11">
<ChildA>1A</ChildA>
<ChildB key="Key1">1B</ChildB>
<ChildC>
<ChildD>ValD</ChildD>
</ChildC>
</Node>
<Node key="22">
<ChildA>2A</ChildA>
<ChildB key="Key2">2B</ChildB>
<ChildC>
<ChildD>ValD</ChildD>
</ChildC>
</Node>
</My>
</To>
</Path>|;
my $twig = XML::Twig::XPath->new(pretty_print => 'indented')->parse($xml[0]);
#Finding the whole Node, using xpath. This shit also works if you have Twig, not XPath.
my @constraint = $twig->findnodes('/Path/To/My/Node[@key="22"]');
say $constraint[0]->sprint;
say ref($constraint[0]);
my $child_key = $constraint[0]->find('//ChildB/@key');
say $child_key;
$ constraint [0]は正当にXMLノードを出力します。
そしておそらく間違っている私は$ child_keyがキー2ことを期待するが、それはKey1Key2
は私が何ができるかであることが判明しますか?完全なXPath検索を行うと、出力が得られます。