2014-05-12 4 views
0

, 내가 종류, 특성 및 테스트 케이스를 얻을 필요가 XML :: LibXML 동적 노드와 XML을 구문 분석 구조가 다르기 때문에 좀 더 많을 수도 있습니다 테스트 스위트 & 결과 노드 다음에 findnodes의 노드가 올바르지 않습니다.펄 내가 성공적으로 문제는 때때로 XML :: LibXML과 findnodes 를 사용하여 수행 , 나는이 XML 파일을

그래서 그것을 처리하는 가장 좋은 방법은 무엇입니까? 하지 유형을 검색하는 방법을 잘 = "나는 올바른 기본 시작 노드를 모르는 경우 (I가 필요로하는 정보를 가지고있는 노드) 조명기구.

<test-A> 
<test-suite type="Project"> 
    <results> 
     <test-suite type="Setup"> 
      <results> 
      <test-suite type="Fixture> 
       <categories> 
       <category name="AAA" /> 
       <category name="BBB" /> 
       </categories> 
       <properties> 
       <property name="CCC" /> 
       <property name="DDD" /> 
       </properties> 
       <results> 
       <test-case name="EEE" /> 
       <test-case name="DDD" /> 
       </results> 
      </test-suite> 
      </results> 
     </test-suite> 
    </results> 
    </test-suite> 
</test-A> 
+0

현재 필요한 요소를 찾기 위해 사용중인 XPath 표현식을 표시 할 수 있습니까? 그것은'test-suite [type = "Fixture"]'가 트릭을 수행해야하는 것처럼 보이지만, 당신이 질문에 언급하지 않은 추가 요구 사항이 있다고 느낍니다. – amon

+0

몇 가지 시도 : '*/test-suite [type = "Fixture"]' '테스트 스위트 [type = "Fixture"]'more ... – Epligam

답변

0

은 빠른에 대한 XPath Examples에서보세요 . XPath의 작성 방법에 대한 팁

위해 당신이 @ 기호 잊지 마세요, 특정 속성을 지정할 수 있습니다 :. //test-suite[@type="Fixture"]을 또한, 현재 XML 내가 갈거야 "Fixture 후 닫는 따옴표가 누락 복사/붙여 넣기 오류라고 가정합니다.

use strict; 
use warnings; 

use XML::LibXML; 

my $dom = XML::LibXML->load_xml({IO => \*DATA}); 

for my $node ($dom->findnodes('//test-suite[@type="Fixture"]')) { 
    print $node, "\n"; 
} 


__DATA__ 
<test-A> 
    <test-suite type="Project"> 
    <results> 
     <test-suite type="Setup"> 
      <results> 
      <test-suite type="Fixture"> 
       <categories> 
       <category name="AAA" /> 
       <category name="BBB" /> 
       </categories> 
       <properties> 
       <property name="CCC" /> 
       <property name="DDD" /> 
       </properties> 
       <results> 
       <test-case name="EEE" /> 
       <test-case name="DDD" /> 
       </results> 
      </test-suite> 
      </results> 
     </test-suite> 
    </results> 
    </test-suite> 
</test-A> 
+0

XPath 표현이 저에게 효과적이었습니다 (@ 기호를 잊어 버렸습니다) – Epligam