从XML文件中删除节点



我有一个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

相关内容

  • 没有找到相关文章

最新更新