2014-12-06 5 views
-1

저는 XML::Twig을 처음 사용합니다. 아래 그림과 같이 모든 <product> 요소의 속성 순서를 변경하고 싶습니다.Perl과 XML :: Twig을 사용하여 XML 요소의 속성 순서를 변경하는 방법

Input.xml 나는이

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

내 코드처럼 필요

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

은 다음과 같습니다

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 :: 나뭇 가지부터 기본 출력에 의한 경우

는 알파벳 순서로 속성 및 순 idtype 전에 오는, markup의 전에, 그것은 보인다. keep_atts_order 옵션을 제거하고 voilà! 파일을 읽고 씁니다! 나는 대부분의 다른 XML 도구가 이런 식으로 행동 할 것이라고 생각한다.

+0

필자는 요구 사항이 속성의 순서에 대해 * 제어 *를 가지고 있다고 생각합니다. 사전 질서가이 특별한 필요를 충족 시킨다는 것을 제안하는 것이 해결책이되지는 않습니다. 'XML :: Twig'이 속성 식별자를 정렬하는 데 신경을 써서 "대부분의 다른 XML 도구도 이와 같이 동작 할 것입니다"*라고 생각하면 놀랍습니다. – Borodin

+1

예측 가능한 순서가 좋으면 파일을 불필요하게 변경하지 않아도됩니다. 초기 요구 사항은 분명하지 않으므로 사실상 사전 순으로 속성을 정렬하는 것이 중요합니다. 우리는 OP가 그것에 대해 무엇을 말해야하는지 볼 것입니다. – mirod

관련 문제