如何在Perl中复制和编辑XML文件?

时间:2011-02-23 06:51:09

标签: regex perl

我正在将XML文件的内容复制到另一个XML文件中,这是最后一行:

</references></resume></xpath>  

我应该只写</resume>,而不是</xpath> 如何在Perl中实现这一目标?我可以使用正则表达式吗?

这是我用来打印输出的命令:

$out_content .= "$_";

2 个答案:

答案 0 :(得分:3)

看起来您正在通过字符串连接将XML片段组合成更大的片段。不要这样做,这很容易出错。相反,依靠真正的XML工具包来理解所涉及的复杂性。

例如,XML :: Twig附带了工具xml_splitxml_merge,可以轻松完成您想要的工作。

答案 1 :(得分:1)

有两种方法可以做到:

  • 糟糕但快速的方式:使用正则表达式

 $outContent = $contentOfOldXmlFile;
 $outContent =~ s#^.*<xpath>((.|\n)*)</xpath>$#$1#;
  • 正确的方法:使用XML::DOM

use XML::DOM;
use XML::XQL; 
use XML::XQL::DOM; 

eval {
  my $xml=new XML::DOM::Parser->parsefile($yourFilename);
  my $outContent = "";
  for($xml->xql(qq(//resume))) {
    $outContent .= $_->toString();
  }
  $xml->dispose();
};
print "ERROR:$@\n" if $@;

然后您将新内容导入$outContent,您可以打印或写入所需的文件。

最好使用XML::DOM API获取您想要的内容(使用$node->toString()),而不是连接字符串。