【问题标题】:XML::LibXML replace element valueXML::LibXML 替换元素值
【发布时间】:2011-12-07 07:16:02
【问题描述】:

我想替换 xml 文件中元素的“VAL1”值

由于某种原因,它对我不起作用:

   <testing>
<application_name>TEST</application_name>
<application_id>VAL1</application_id>
<application_password>1234</application_password>
   </testing>

my $parser =XML::LibXML->new();
$tree   =$parser->parse_file($xml);
$root   =$tree->getDocumentElement;
my ($elem)=$root->findnodes('/testing/application_id');
$elem->setValue('VAL2');    

错误是“无法通过包“XML::LibXML::Element...”找到对象方法“setValue”

【问题讨论】:

    标签: perl xml-libxml


    【解决方案1】:

    元素没有值,因此它没有setValue 方法。

    “VAL1”是元素子节点的值,text node。

    my ($application_id_text) = $root->findnodes('/testing/application_id/text()');
    $application_id_text->setData('VAL2');
    

    很遗憾,这并不完全安全。如果元素有多个文本子节点怎么办?如果根本没有怎么办?

    更安全的方法是抓取元素,删除其所有作为文本节点的子节点(可以通过删除其所有子节点轻松完成),然后添加具有所需值的新文本节点。

    my ($application_id_node) = $root->findnodes('/testing/application_id');
    $application_id_node->removeChildNodes();
    $application_id_node->appendText('VAL2');
    

    【讨论】:

      【解决方案2】:

      Node 或 Element 类中没有 setValue 方法,请参阅文档以获取可用方法列表。您可以像这样删除元素的子元素并附加新的文本节点:

      $elem->removeChildNodes();
      $elem->appendText('VAL2');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2011-06-06
        相关资源
        最近更新 更多