如何更新XML标签的内容?

如何更新XML标签的内容?

问题描述:

我想写一个Perl代码来替换XML中的标签的内容。例如。 <A>Hello<A>如何更新XML标签的内容?

我想在我的XML中搜索标记<A>,然后用“Hi”替换值“Hello”。

我该怎么做?

+6

Stack Overflow是这里支持谁已经尽了最大努力,但未能但未能解决规划问题的程序员。这里没有证据表明你已经做出了任何努力。如果你显示你写的代码,我们会尽力帮助你。 – Borodin

使用XML::XSH2,包装周围XML::LibXML

open file.xml ; 
for //A[text()='Hello'] set text() 'Hi' ; 
save :b ; 
+0

请详细说明一下。我无法理解这个逻辑。 –

+0

@PrafulMathur:这个答案中的代码是嵌入的XSH。作者没有显示包含它所需的Perl。 IMO这个模块对于这样一个简单的应用来说是矫枉过正的。 – Borodin

+0

@Borodin:你可以自己使用'xsh',而不需要任何嵌入。适用于简单的应用程序:-) – choroba

XML::Twig模块适用于这一点,因为它允许您指定解析XML当遇到一个给定的标签所执行的处理程序。

如果你提供了一些真正的XML数据作为例子,它会有所帮助,但我已经使用了你的问题的精确度。

use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig->new(
    twig_handlers => { A => sub { $_->subs_text(qr/Hello/, 'Hi') } }, 
); 

$twig->parse(*DATA); 
$twig->print; 

__DATA__ 
<root> 
I want to replace the content of a tag in XML. e.g. In 
<A>Hello</A> I want to replace the value "Hello" with "Hi". 
</root> 

输出

<root> 
I want to replace the content of a tag in XML. e.g. In 
<A>Hi</A> I want to replace the value "Hello" with "Hi". 
</root>