Как изменить порядок атрибутов элемента 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 будут вести себя так же.