在 Perl 中使用 LibXML 缩进子节点
Indentation of child nodes using LibXML in Perl
我在使用 XML 添加子节点时难以保持缩进。
例如,如果我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
</plurals>
</resources>
还有这段代码:
#!/usr/bin/perl
use XML::LibXML;
use strict;
my $parser = XML::LibXML->new;
my $dom = $parser->parse_file("plurals.xml") or die;
my @plurals = $dom->getElementsByTagName("plurals");
foreach my $plural (@plurals){
my $tag = $dom->createElement("item");
$tag->setAttribute('quantity'=>'many');
$tag->appendText("many items selected");
$plural->appendChild($tag);
}
$dom->toFile("plurals.xml");
我得到这个输出:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
<item quantity="many">many items selected</item></plurals>
</resources>
而我想要得到这个:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
<item quantity="many">many items selected</item>
</plurals>
</resources>
我不想使用 LibXML Pretty Print,因为它会改变 XML 的整个布局。我知道这在技术上都是一样的,但我会尽可能避免空格差异。
谢谢
I don't want to use LibXML Pretty Print
Pretty Print 是最好的选择。备选方案是:
- 抓住
末尾的文本节点(现在在您的新项目之前),它以前是换行符和 4 个空格,并将其更改为换行符和 8 个空格
- 在你的新项目后面添加一个文本节点,并给它一个换行符和 4 个空格
但是如果您的 XML 移动并改变深度,这些数字 (4/8) 将会改变。漂亮的打印(连同 no_blanks 解析)就是为您设计的那种东西。
我在使用 XML 添加子节点时难以保持缩进。
例如,如果我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
</plurals>
</resources>
还有这段代码:
#!/usr/bin/perl
use XML::LibXML;
use strict;
my $parser = XML::LibXML->new;
my $dom = $parser->parse_file("plurals.xml") or die;
my @plurals = $dom->getElementsByTagName("plurals");
foreach my $plural (@plurals){
my $tag = $dom->createElement("item");
$tag->setAttribute('quantity'=>'many');
$tag->appendText("many items selected");
$plural->appendChild($tag);
}
$dom->toFile("plurals.xml");
我得到这个输出:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
<item quantity="many">many items selected</item></plurals>
</resources>
而我想要得到这个:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<plurals name="number_of_items_selected">
<item quantity="one">%1$d selected</item>
<item quantity="other">%1$d selected</item>
<item quantity="many">many items selected</item>
</plurals>
</resources>
我不想使用 LibXML Pretty Print,因为它会改变 XML 的整个布局。我知道这在技术上都是一样的,但我会尽可能避免空格差异。
谢谢
I don't want to use LibXML Pretty Print
Pretty Print 是最好的选择。备选方案是:
- 抓住
末尾的文本节点(现在在您的新项目之前),它以前是换行符和 4 个空格,并将其更改为换行符和 8 个空格 - 在你的新项目后面添加一个文本节点,并给它一个换行符和 4 个空格
但是如果您的 XML 移动并改变深度,这些数字 (4/8) 将会改变。漂亮的打印(连同 no_blanks 解析)就是为您设计的那种东西。