perl - 从 xml 文件中删除节点

2024-02-06

我有一个 XML 文件,我想读取它 - 删除一个节点 - 保存它。 我从终端运行 perl (perl script.pl)

XML 示例(文件名.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;

现在它在终端中输出预期结果,但不保存文件。
预期结果(文件名.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 为 0,则文档将按原来的样子转储 解析的

如果 $format 为 1,libxml2 将添加可忽略的空格,因此节点 内容更容易阅读。现有的文本节点不会改变

如果 $format 为 2(或更高),libxml2 将充当 $format == 1 但它 向每个文本节点添加前导和尾随换行符。

给你:

$xmldoc->toFile("someFile.xml", $format);

or

print {$out_fh} $xmldoc->toString($format);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perl - 从 xml 文件中删除节点 的相关文章

随机推荐