【问题标题】:Libxml - replace xml value if particular conditions are metLibxml - 如果满足特定条件,则替换 xml 值
【发布时间】:2020-06-09 13:59:04
【问题描述】:

我有一个不完整的 Perl 脚本,其内容如下:

use XML::LibXML;
use XML::LibXSLT;

my $xml_mess = "
<activity>
<ref1></ref1>
<ref2>id_119604</ref2>
<ref3>id_342432</ref3>
</activity>";

my $parser = XML::LibXML->new();
my $xml_mess_obj = $parser -> parse_string($xml_mess);
my $ref1 = $xml_mess_obj -> getDocumentElement -> findNodes("/activity/ref1") -> [0] -> to_literal(); 
my $ref2 = $xml_mess_obj -> getDocumentElement -> findNodes("/activity/ref2") -> [0] -> to_literal();
my $ref3 = $xml_mess_obj -> getDocumentElement -> findNodes("/activity/ref3") -> [0] -> to_literal();

我想解析$xml_mess 并进行以下更改:

  1. 当ref3 有值时,我希望ref1 有相同的值。
  2. 当ref3 没有值时,我希望ref1 具有与ref2 相同的值。

我一直在寻找有关如何使用 LibXML 执行此操作的示例,但不知道如何有条件地更新节点。

【问题讨论】:

  • 请确保您的示例代码可以编译。
  • 提示:-&gt; getDocumentElement 不是必需的。文档元素提供findNodes
  • 提示:-&gt; findNodes(...) -&gt; [0] -&gt; to_literal()可以替换为-&gt; findvalue(...)

标签: perl xml-libxml


【解决方案1】:

这似乎可以满足您的需求。有关详细信息,请参阅嵌入式 cmets。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use XML::LibXML;

my $xml_mess = '
<activity>
<ref1></ref1>
<ref2>id_119604</ref2>
<ref3>id_342432</ref3>
</activity>';

# Load the XML into a Document object
my $xml_mess_obj = XML::LibXML->load_xml(string => $xml_mess);

# Get an Element object for the <ref1> node.
my $ref1 = $xml_mess_obj->findnodes('//ref1')->[0];

# Get the text of the <ref2> and <ref3> nodes.
my $ref2_txt = $xml_mess_obj->findnodes('//ref2')->[0]->to_literal;
my $ref3_txt = $xml_mess_obj->findnodes('//ref3')->[0]->to_literal;

# Use appendText() to add text to the <ref1> node.
# Note: // is the 'defined-or' operator. It returns $ref3_txt if that
# is defined, otherwise it returns $ref2_txt.
$ref1->appendText($ref3_txt // $ref2_txt);

# Display the result.
say $xml_mess_obj->toString;

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 2013-11-15
    • 2020-08-18
    • 2018-08-24
    • 2021-12-22
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多