dim*_*ras 2 xml perl xml-parsing xml-libxml
我有一个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>
Run Code Online (Sandbox Code Playgroud)
示例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;
Run Code Online (Sandbox Code Playgroud)
现在它在终端输出预期结果,但不保存文件.
预期结果(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>
Run Code Online (Sandbox Code Playgroud)
我搜索了好几个小时,找不到任何东西,对不起,如果它是重复的!
这是我第一次体验perl,所以请欢迎任何帮助,谢谢.
使用toString时,文档说这样做:
open my $out_fh, '>', 'somefile.xml';
print {$out_fh} $xmldoc->toString;
Run Code Online (Sandbox Code Playgroud)
您也可以使用该toFile()功能保存它:
$xmldoc->toFile("someFile.xml");
Run Code Online (Sandbox Code Playgroud)
编辑:同样引用文档,(这就是我所做的)你可以将format参数传递给这些函数.
如果$ format为0,则文件将被转储,因为它最初被解析
如果$ format为1,则libxml2将添加可忽略的空格,因此节点内容更易于阅读.现有文本节点不会被更改
如果$ format为2(或更高),则libxml2将作为$ format == 1,但它会为每个文本节点添加前导和尾随换行符.
给你:
$xmldoc->toFile("someFile.xml", $format);
Run Code Online (Sandbox Code Playgroud)
要么
print {$out_fh} $xmldoc->toString($format);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6025 次 |
| 最近记录: |