2

有什么方法可以从 xml 代码中保留节点的标签?问题的解释可能是这样的:我有一个 xml 输入,我查询输入,我想获得查询项目的 xml 输出。

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

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

<?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>

谢谢你的回答。

4

2 回答 2

2

该库正在按照您的要求进行操作 - 它正在返回节点的文本内容。标记不是文本内容,因此它不会提供给您。

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

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

于 2013-03-15T13:57:39.763 回答
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>
于 2013-03-15T14:02:08.003 回答