2013-03-15 71 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>