Как изменить порядок атрибутов элемента XML с помощью Perl и XML::Twig

Я новичок в XML::Twig, Я хочу изменить порядок атрибутов всех <product> элементы, как показано ниже.

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 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; 

Как я могу это изменить?

1 ответ

Как уже упоминалось в комментариях, это странный запрос. Вы, вероятно, пытаетесь сделать что-то неправильно (или работаете с инструментами, которые не полностью реализуют XML).

В любом случае, поскольку XML::Twig по умолчанию выводит атрибут в алфавитном порядке и в алфавитном порядке id приходит раньше markup, который предшествует typeПохоже, вам не нужно ничего делать. Удалить keep_atts_order вариант, прочитайте и напишите файл, вуаля! Я подозреваю, что большинство других инструментов XML будут вести себя так же.

Другие вопросы по тегам