使用XML :: LibXML查找和替换文本

时间:2013-06-21 09:56:28

标签: xml perl xml-parsing xml-libxml

我想找到由代字号(~)括起来的文字,并在文字前加上一些字符串,例如将~it~替换为XML文件中的~T1it~,然后将结果保存到另一个文件中。我知道如何使用XPath获取文本以及如何替换它,但我不知道如何将替换的文本放在他们的位置并输出它。

这是我的输入XML:

<?xml version="1.0"?>
<chapter>
<section>
<para id="p001">this is<math>~rom~This is roman~normal~</math>para</para>
<para id="p002">this is<math>~rom~This is roman~normal~</math>para</para>
<para id="p003">this is<math>~rom~This is roman~normal~</math>para</para>
</section>
<abstract>
<para id="p004">This is <math>~rom~This is roman~normal~</math>para</para>
<para id="p005">this is<math>~rom~This is roman~normal~</math>para</para>
<para id="p006">this is<math>~rom~This is roman~normal~</math>para</para>
</abstract>
</chapter>

这是我的Perl脚本:

use strict;
use warnings;
use XML::LibXML;
#use XML::LibXML::Text;
use Cwd 'abs_path';
my $x_name=abs_path($ARGV[0]);
my $doc = XML::LibXML->load_xml(location => $x_name, no_blanks => 1);
my $xpath_expression='/chapter/section/para/math';
my @nodes = $doc->findnodes( $xpath_expression );
foreach my $node(@nodes){
  my $content = $node->textContent;
  $content=~s#\~rom\~#~T1rom~#sg;
  print $content,"\n";
}

这是我想要的输出:

<?xml version="1.0"?>
<chapter>
<section>
<para id="p001">this is<math>~T1rom~This is roman~normal~</math>para</para>
<para id="p002">this is<math>~T1rom~This is roman~normal~</math>para</para>
<para id="p003">this is<math>~T1rom~This is roman~normal~</math>para</para>
</section>
<abstract>
<para id="p004">This is <math>~rom~This is roman~normal~</math>para</para>
<para id="p005">this is<math>~rom~This is roman~normal~</math>para</para>
<para id="p006">this is<math>~rom~This is roman~normal~</math>para</para>
</abstract>
</chapter>

1 个答案:

答案 0 :(得分:2)

一种可能性:使用setData的{​​{1}}方法:

XML::LibXML::Text