2011-04-13 5 views
3

나는 Perl에서 XML :: Twig 라이브러리를 사용하여 놀고 있으며, 다음과 같은 작업을 수행 할 수있는 방법은 확실하지 않습니다. 내가 어디서부터 시작해야할지 모르겠으므로 아직 코드를 작성하지 않았습니다. 사실 몇 가지 아이디어가 있은 후, 필자는 (희망적으로) 거기서 갈 수 있습니다 ...Perl XML :: Twig 질문하시기 바랍니다

XML ":: Twig를 사용하여"MyClass.Name "태그의 자식 값인"This_Is_My_Name "값을 찾고 싶습니다. . 나는 라고 생각한다. 나는이 부분을 할 수 있지만, 도움이 될만한 부분이다.

그러면 아래 예제에서 "987654321"인 "MyClass.Code"LinkValue 번호를 얻고 싶습니다.

희망이 있습니다. 그래서 이런 식으로 돌아 다니는 방법을 모르겠다.

이 값을 추출하는 XPath를 사용할 수 있습니다

<Object Class="MyClass" Id="123456789"> 
    <Property Name="MyClass.Link"> 
     <LinkValue> 
      <Id>2468</Id> 
     </LinkValue> 
    </Property> 
    <Property Name="MyClass.Code"> 
     <LinkValue> 
      <Id>987654321</Id> 
     </LinkValue> 
    </Property> 
    <Property Name="MyClass.Name"> 
     <StringValue>This_Is_My_Name</StringValue> 
    </Property> 
</Object> 

답변

9

, 다음과 같이

그래서 내 XML의 문서입니다 :) 도와주세요. This_Is_My_Name의 xpath는 /Object/Property[@Name="MyClass.Name"]/StringValue이고 LinkValue의 xpath는 /Object/Property[@Name="MyClass.Code"]/LinkValue/Id입니다. 코드는 다음과 같습니다.

use XML::Twig; 

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

# parse the file 
$twig->parsefile("x.xml"); 

# look for StringValue 
@nodes=$twig->findnodes('/Object/Property[@Name="MyClass.Name"]/StringValue'); 
$stringVal=pop(@nodes)->text(); 
print $stringVal."\n"; 

# look for LinkValue 
@nodes=$twig->findnodes('/Object/Property[@Name="MyClass.Code"]/LinkValue/Id'); 
$linkVal=pop(@nodes)->text(); 
print $linkVal; 
+0

고맙습니다. – jo82

+0

다음과 같은 오류 메시지가 나타납니다. C에서 정의되지 않은 값인 "get_xpath"를 호출 할 수 없습니다./strawberry/perl/site/l ib/XML/Twig.pm 라인 3353. – jo82

+0

코드가 작동합니다 – mirod

4

이 경우 XPath를 사용하는 대신 일반적으로 트리 탐색 방법을 사용합니다. 여기 first_elt 속성을 찾으려면 field (이는 first_child()->text과 같습니다) 링크 값을 가져옵니다.

#!/usr/bin/perl 

use strict; 
use warnings; 
use XML::Twig; 

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

# parse the file 
$twig->parsefile("so.xml"); 

# look for StringValue 
my $property= $twig->first_elt('Property[@Name="MyClass.Code"]'); 
my $link= $property->field('LinkValue'); 
print $link; 
관련 문제