如何使用Perl和XML::Twig更改XML元素属性的顺序
我是新手。我想更改所有如何使用Perl和XML::Twig更改XML元素属性的顺序,xml,perl,xml-twig,Xml,Perl,Xml Twig,我是新手。我想更改所有元素属性的顺序,如下所示 Input.xml <?xml version="1.0" encoding="utf-8"?> <root> <product markup="xml" type="books" id="book1"> <name>Analysis</name> <prize>$203</prize> <subject>Construct&
元素属性的顺序,如下所示
Input.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<product markup="xml" type="books" id="book1">
<name>Analysis</name>
<prize>$203</prize>
<subject>Construct</subject>
</product>
<product markup="xml" type="books" id="book2">
<name>Analysis</name>
<prize>$203</prize>
<subject>Bio</subject>
</product>
</root>
我怎样才能改变这一点?正如评论中提到的,这是一个奇怪的请求。您可能试图以错误的方式执行某些操作(或者您使用的工具没有真正完全实现XML)
在任何情况下,由于XML::Twig默认情况下按字母顺序输出属性,并且字母顺序
id
位于markup
之前,后者位于type
之前,所以看起来您不必做任何事情。删除keep_atts_order
选项,读写文件,瞧!我怀疑大多数其他XML工具也会这样做。这似乎是一个奇怪的请求。请你解释一下为什么要重新订购?声明明确指出属性的顺序并不重要。我认为要求对属性的顺序进行一些控制。建议字典顺序满足这一特定需求并不构成解决方案。如果XML::Twig
费心对属性标识符进行排序,并且非常怀疑“大多数其他XML工具也会这样做”,我也会感到惊讶。可预测的顺序是好的,它可以避免不必要地更改文件。我不清楚最初的要求,所以有一个重大的变化,实际上是按字母顺序对属性排序。我们来看看OP会怎么说。
<?xml version="1.0" encoding="utf-8"?>
<root>
<product id="book1" markup="xml" type="books">
<name>Analysis</name>
<prize>$203</prize>
<subject>Construct</subject>
</product>
<product id="book2" markup="xml" type="books">
<name>Analysis</name>
<prize>$203</prize>
<subject>Bio</subject>
</product>
</root>
use XML::Twig;
my $XML = XML::Twig->new(
twig_handlers => {
#'product' => sub {$_},
# (I don't know this process)
},
pretty_print => 'record',
output_encoding => 'utf-8',
keep_atts_order => 1,
);
$XML->parsefile("input.xml");
$XML->purge;