2013-03-15 74 views
2

有没有办法如何保持从XML代码节点的标签?问题的解释可能是这样的:我有一个xml输入,我查询输入,我想要得到查询项目的xml输出。Perl的XML :: LibXML的textContent

<pets> 
    <dog> 
    <name>Maggie</name> 
    <dob>12 October 2005</dob> 
    <price>75</price> 
    <owner>Rosie</owner> 
    </dog> 
</pets> 

当我在Perl程序访问//pets/dog,输出如下:

<?xml version='1.0' standalone='yes'?> 
<dog> 
    Maggie 
    12 October 2005 
    75 
    Rosie 
</dog> 

有什么办法给函数textContent一些参数 保持标签?这是该放节点 到哈希我的循环代码块,然后将其输出:

$parser = XML::LibXML->new(); 
$data = $parser->load_xml(string => $takeninput); 
$xml = new XML::LibXML::XPathContext($data); 
$i = 0; 
for $node ($xml->findnodes('//pets/dog')) 
    { 
    $name = $node->nodeName; 
    $hash{$name}[$i] = $node->textContent; 
    $i++; 
    } 

为了代码放置在儿童?为了有这样的输出:

<?xml version='1.0' standalone='yes'?> 
<dog> 
    <name>Maggie</name> 
    <dob>12 October 2005</dob> 
    <price>75</price> 
    <owner>Rosie</owner> 
</dog> 

感谢您的答案。

回答

2

这个库正在做你刚刚提出的问题 - 它正在返回节点的文本内容。标记不是文字内容,所以它不会给你。

我想你想要的是$node->toString,它会将dog节点作为格式化的XML返回。

对于漂亮的布局,使用$node->toString(1)

+0

非常感谢您!这就是我整天寻找的东西:) – 2013-03-15 14:27:06

0

使用XML::XSH2

#!/usr/bin/perl 
use warnings; 
use strict; 

use XML::XSH2; 

xsh << '__XSH__'; 
    open 1.xml ; 
    ls //pets/dog |> $x ; 
__XSH__ 

print $XML::XSH2::Map::x; 

输出:

<dog> 
    <name>Maggie</name> 
    <dob>12 October 2005</dob> 
    <price>75</price> 
    <owner>Rosie</owner> 
    </dog>