我有一个XML文件,我想读取它-删除一个节点-保存它。我从终端运行perl (perl script.pl)
示例XML (filename.xml):
<?xml version="1.0" encoding="UTF-8"?>
<twice>
<inner>
<twice>
<name>John</name>
<surname>Smith</surname>
</twice>
<twice>
<name>Alan</name>
<surname>Bowler</surname>
</twice>
<twice>
<name>Michael</name>
<surname>Deck</surname>
</twice>
</inner>
</twice>
perl脚本示例(script.pl):
use strict;
use warnings;
use XML::LibXML;
my $filename = "filename.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $dead ($xmldoc->findnodes(q{/twice/inner/twice[surname = "Bowler"]})) {
$dead->unbindNode;
}
print $xmldoc->toString;
现在它在终端输出预期的结果,但没有保存文件。
预期结果(filename.xml):
<?xml version="1.0" encoding="UTF-8"?>
<twice>
<inner>
<twice>
<name>John</name>
<surname>Smith</surname>
</twice>
<twice>
<name>Michael</name>
<surname>Deck</surname>
</twice>
</inner>
</twice>
我已经找了好几个小时了,没有找到任何东西,如果是重复的,对不起!
这是我第一次使用perl,所以欢迎任何帮助,谢谢。
当使用toString时,文档说这样做:
open my $out_fh, '>', 'somefile.xml';
print {$out_fh} $xmldoc->toString;
您也可以使用toFile()
函数保存它:
$xmldoc->toFile("someFile.xml");
编辑:同样引用文档,(这是我所做的)你可以传递format参数给这些函数。
如果$format为0,则文档按原始格式转储解析
如果$format为1,libxml2将添加可忽略的空白,因此节点内容更容易阅读。现有的文本节点将不会被修改
如果$format为2(或更大),libxml2将作为$format == 1,但它将作为$format == 1为每个文本节点添加一个前后换行符
给你:
$xmldoc->toFile("someFile.xml", $format);
或
print {$out_fh} $xmldoc->toString($format);
您也可以使用App::Xml_grep2从命令行执行此操作:
xml_grep2 -v '/twice/inner/twice[surname = "Bowler"]' input.xml > output_xml