如何从下降的xml节点中分离字符串来获取perl中xml :: xmllib模块的to_literal函数?

时间:2012-03-22 10:18:13

标签: xml perl xml-libxml

我有这样的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值的唯一和sparate,即:

One Two Three Four

怎么做?

1 个答案:

答案 0 :(得分:2)

XML::LibXML::Node的概要为您提供了一个提示:

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

因此,请使用findnodes方法接收列表结果。此外,您要选择A元素的子元素,将XPath表达式更改为适合:

my @children_literal_text = map { $_->to_literal } $xml->findnodes('/A/*');
# ('One', 'Two')