2009-08-12 13 views
2

다음과 같은 XML 문자열이 있습니다.Perl의 XML :: Twig를 사용하여 하위 요소에 특성을 추가하려면 어떻게해야합니까?

<DATA> 
    <CHILD_DATA ATVAL="value1"/> 
    <CHILD_DATA /> 
</DATA> 

원하는 최종 출력은 다음과 같습니다.

<DATA> 
    <CHILD_DATA ATVAL="value1"/> 
    <CHILD_DATA ATVAL="value2"/> 
</DATA> 

내 나뭇 가지 $t<DATA>입니다. 이제 두 번째 <CHILD_DATA />에 특성을 추가하려고합니다. 특성은 ATVAL="value2"입니다. 나는 다음을 시도 :

$t->last_child('CHILD_DATA')->set_att{"ATVAL","value2"}; 

이것은 작동하지 않았다. 이 코드의 문제점은 무엇입니까? 이것을 할 또 다른 방법이 있습니까?

+1

당신이 당신의 자신의 질문을 편집 할 수 있다는 사실을 알고 계십니까? – innaM

+3

좋아요, 그래서 ... 조금은 비밀을 들여 보내 드리죠. "$ object-> method {"list ","items "}"는 유효한 펄 구문이 아닙니다. – jrockway

+0

다음은 어떻게 할 수 있습니까? 지금까지 – Ninja

답변

6

존이 당신에게 암시 한 것처럼, 게시 한 코드에 구문 오류가 있습니다. 당신은 같은 컴파일 오류 봤어야 : 테스트 라인 (18), 근처에

구문 오류 "-> set_att은 {"program.pl의 실행으로 인해 컴파일 오류로 중단되었습니다.

그러나 코드가 실제로 수행 한 것과 일치하지 않도록 코드에 대답을 입력했을 수도 있습니다. 항상 실제 코드를 다시 입력하는 대신 질문에 넣고 가능한 한 전체 프로그램을 게시하십시오. 프로그램을 게시 할 때 처음부터 다시 시작할 필요가 없습니다. :)

여기 당신이 원하는 않는 프로그램입니다 :

#!/usr/bin/perl 

use XML::Twig; 

my $xml = <<'XML'; 
<DATA> 
    <CHILD_DATA ATVAL="value1"/> 
    <CHILD_DATA /> 
</DATA> 
XML 

my $twig= XML::Twig->new(keep_spaces => 1); 

    $twig->parse($xml); 

    $t = $twig->root; 

    $t->last_child('CHILD_DATA')->set_att("ATVAL" => "value2"); 

$twig->flush; 
+0

처음에는 내가 잘못 생각한 부분이 있지만 처음에는 코드 부분에 "$ t-> last_child ('CHILD_DATA') -> set_att {"ATVAL ","value2 "}; 구문이 올바르지 않습니까? 하지만 솔루션에서 동일한 코드를 사용 했습니까? – Ninja

+1

@ 닌자 : 약간의 차이가 있습니다 ... 브라이언은 set_att()를 사용하고 있지만 코드와 주석은 set_att {} ie를 보여줍니다. 괄호 대신에 중괄호 {}를 사용하고 있습니다. – draegtun

+3

@ 닌자, 코드를 어떻게 보는지 모르겠지만 새로운 사람이라면 분명히 좋은 프로그래머 글꼴을 사용하지 않았을 것으로 생각됩니다. 그 차이를 매우 두드러지게하고 멀리 몇 미터 떨어진 곳에서 쉽게 찾을 수있는 글꼴이 있습니다. :) –

2

불과 몇 생각 : 번 같은 질문을 여러 게시

  1. 당신을 돕는 사람 을 사랑 받게하지 않을.

  2. 코드가 구문 상 정확하게 일치하지 않으므로 이 맞으므로 에 문제가있는 것은 아닙니다.

  3. 왜 이 점점 오류를 포함하지? 아마도 그것은 문제에 대해 빛을 발산합니까?

+1

안녕 이더. 비슷한 질문을했지만 비슷한 것은 아닙니다. 새로운 요소를 삽입하는 것과는 대조적으로 기존의 자식 요소의 속성을 설정할 수있는 방법을 알고 싶습니다. 이 경우, 이 이미 존재하고 나는 단지 두 번째 태그에 속성을 추가해야합니다.나는 또한 다음을 시도했다 : $ elt = $ t-> root-> last_child ('CHILD_DATA'); $ elt-> set_att ("ATVAL", "value2"); 그러나 그것은 도움이되지 못했습니다. 제발 도와주세요 – Ninja

+0

"도움이되지 못했습니다"는별로 구체적이지 않습니다. 무엇을 시도 했습니까? 그리고 결과는 무엇입니까? – Ether

+0

오케이. 여기 그림이있다. 내 나뭇 가지 루트 변수 $ t는 (는) ''을 가리 킵니다. 나는 그 질문에 말했듯이 그 아이에 액세스하고 그 속성을 설정하려고합니다. 이것을 어떻게 할 수 있는지 알려주십시오. 어쨌든 내가 한 일을 잊어 버려. – Ninja

관련 문제