gpt4 book ai didi

xml - perl - 从 xml 文件中删除节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:54:03 26 4
gpt4 key购买 nike

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

编辑:另外引用文档,(这是我所做的)您可以将格式参数传递给这些函数。

If $format is 0, than the document is dumped as it was originally parsed

If $format is 1, libxml2 will add ignorable white spaces, so the nodes content is easier to read. Existing text nodes will not be altered

If $format is 2 (or higher), libxml2 will act as $format == 1 but it add a leading and a trailing line break to each text node.

给你:

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

print {$out_fh} $xmldoc->toString($format);

关于xml - perl - 从 xml 文件中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com