2014-12-06 1 views
-1

Я новичок в XML::Twig. Я хочу изменить порядок атрибутов всех элементов <product>, как показано ниже.Как изменить порядок атрибутов элемента 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</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 1.0] (http://www.w3.org/TR/REC-xml/) явно указано, что порядок атрибутов не имеет значения. – Borodin

ответ

1

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

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

+0

Я думаю, что требование состоит в том, чтобы иметь некоторый * контроль * по порядку атрибутов. Предположение о том, что порядок словаря удовлетворяет этой конкретной потребности, не является решением. Я также удивлен, если 'XML :: Twig' беспокоит сортировку идентификаторов атрибутов и очень сомневается в том, что *« большинство других инструментов XML будут вести себя так же »*. – Borodin

+1

предсказуемый заказ хорош, он позволяет избежать изменения файла без необходимости. Первоначальное требование мне не понятно, поэтому есть значительное изменение, которое на самом деле заключается в сортировке атрибутов по алфавиту. Мы увидим, что OP должен сказать об этом. – mirod