【问题标题】:Perl XML::LibXML textContentPerl XML::LibXML 文本内容
【发布时间】:2013-03-04 06:35:15
【问题描述】:

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

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

感谢您的回答。

【问题讨论】:

    标签: xml perl xml-libxml


    【解决方案1】:

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

    我认为您想要的是$node-&gt;toString,它将以格式化的 XML 格式返回 dog 节点。

    要获得漂亮的布局,请使用$node-&gt;toString(1)

    【讨论】:

    • 非常感谢!这就是我一整天都在寻找的东西:)
    【解决方案2】:

    使用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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多