XML::LibXML
以下のXMLデータを処理するためにCPANモジュールを使用しています。各要素に子要素があるかどうかを判断する必要があります。周りを検索すると、その目的の例は見つかりません。
<A>
<ts>2012</ts>
<T>M1</T>
<T>M2</T>
<B>
<id>PC</id>
<r>10</r>
<r>30</r>
</B>
</A>
これは私が書いたPerlコードです
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my ($x,$elname,$haschild)= ();
my $parser = XML::LibXML->new();
my $npo = $parser->parse_file("test.xml");
my $rootel = $npo -> getDocumentElement();
$elname = $rootel -> nodeName();
print "Root name=$elname\n";
foreach $x ($rootel->childNodes) {
$elname = $x -> nodeName();
$haschild = $x->hasChildNodes;
print "Child name = $elname and has child = $haschild.\n" unless ($elname =~ /#text/i);
}
以前childNodes
は各ノードを調べていましたが、ノードに子があるかどうかを判断する簡単な方法が見つかりません。
次のようなすべてのノードをループした後、結果が得られることを期待しています。
A: Has children
ts: Has none
T: has none
T: has none
B: Has children
id: Has none
r: Has none
r: Has none
私が得ている結果は次のようになります:
Root name=A
Child name = ts and has child = 1.
Child name = T and has child = 1.
Child name = T and has child = 1.
Child name = B and has child = 1.
hasChildNodes
条件チェック後、すべてのノードがtrueを返すようです。