Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl和XML::Twig更改XML元素属性的顺序_Xml_Perl_Xml Twig - Fatal编程技术网

如何使用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;