-1

私は次のようなXML構造を持っています:

<A>
  <B>One</B>
  <C>Two</C>
  <D>
     <E>Three</E>
     <F>Four</F>
     ...
  </D>
  ...
</A>

構造は大きく、複雑で、私は始めたばかりです。つまり、'/ A'

そして、次のようにperlでコーディングします。

use XML::LibXML;
my $parser = XML::LibXML->new();
my $xml = $parser->parse_file($file);
print $xml->find('/A')->to_literal;

結果が出ます:

OneTwoThreeFour

次のようなコードを使用する場合:

print join (" ", map { $_->to_literal } $xml->findnodes('/A/descendant::*'));

私は得る:

One Two ThreeFour Three Four 

withespaces値を使用して、一意でスペアが必要です。

One Two Three Four

これを行う方法?

4

1 に答える 1

2

XML :: LibXML :: Nodeの概要から、ヒントが得られます。

@nodes = $node->findnodes( $xpath_expression );
$result = $node->find( $xpath );

したがって、このメソッドを使用して結果のリストfindnodesを受け取ります。また、要素の子を選択し、XPath式を次のように変更します。A

my @children_literal_text = map { $_->to_literal } $xml->findnodes('/A/*');
# ('One', 'Two')
于 2012-03-22T11:37:01.883 に答える