2012-06-20 3 views
0

각 노드 내부의 특정 속성에 대한 태그의 내용을 추출노코 기리 (루비) : 나는 다음과 같은 구조의 XML을

<Root> 
    <Batch name="value"> 
     <Document id="ID1"> 
     <Tags> 
      <Tag id="ID11" name="name11">Contents</Tag> 
      <Tag id="ID12" name="name12">Contents</Tag> 
     </Tags> 
     </Document> 

     <Document id="ID2"> 
     <Tags> 
      <Tag id="ID21" name="name21">Contents</Tag> 
      <Tag id="ID22" name="name22">Contents</Tag> 
     </Tags> 
     </Document> 
    </Batch> 
</Root> 

내가 좋아하는 뭔가를 사용하여 각 문서 노드에 대한 특정 태그의 내용을 추출 할 이 :

2 개의 노드마다 id = "ID11"인 태그의 내용을 추출 할 것으로 예상되지만 아무것도 검색하지 않습니다. 어떤 아이디어?

답변

0

xpath가 잘못 사용 된 것으로 보입니다.

'//Root/Batch/Documents/Document/Tags/Tag[@id="ID11"]' 
shoud be 
'//Root/Batch/Document/Tags/Tag[@id="ID11"]' 
+0

맞아요, xpath가 잘못되었지만 여전히 제가하려고하는 것을 포함하지 않습니다. 기본적으로 문서별로 그룹화 된 태그의 컨텐을 추출하고 싶습니다. – Tedi

1

붙여 넣은 XML이 약간 다른데도 xpath에 약간의 오류가 있습니다./Documents/Document를 사용하고 있습니다.

이 작동합니다 :이 작업을 수행하는

//Root/Batch/Document/Tags/Tag[@id="ID11"] 

내가 가장 좋아하는 방법이다이 같은 #css 방법을 사용하여 :

xml.css('Tag[@id="ID11"]').each do |node| 
    puts node.text 
end 
+0

XPath ('Tag [@ id = "ID11"]')와 CSS ('Tag # ID11')를 혼동스럽게 생각합니다. –

0

나는 그것이 다음 코드로 작업 얻을 관리 :

xml.xpath('//Document/Tags').each do |node| 
    node.xpath("Tag[@id='ID11']").text 
end