2012-03-22 36 views
-1

我有XML結構是這樣的:如何從降序xml節點分隔字符串通過perl中的xml :: xmllib模塊的to_literal函數獲取?

<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 

我需要獨特和sparate與withespaces值,即:

One Two Three Four 

如何做到這一點?

回答

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') 
+0

謝謝,我已經更新的問題,由於你的答案 – user1285573 2012-03-22 12:51:47

+0

http://stackoverflow.com/questions/3926589/how -to-select-all-leaf-nodes-using-xpath-expression – daxim 2012-03-22 13:11:17

+0

不錯,但是如果葉子節點不包含字符串呢?胃內?有了這個解決方案,我失去了一些數據... – user1285573 2012-03-22 14:01:29