을 제외한 모든 자손 text() 노드 찾기 내 XML 문서에는 임의로 중첩 된 섹션이 있습니다. 특정 섹션에 대한 참조가 주어지면을 포함하지 않는 해당 섹션 에있는 TextNode
을 모두 찾아야합니다. 경우하위 섹션
<root>
<section id="a1">
<b>A1 <c>A1</c></b>
<b>A1 <c>A1</c></b>
<section id="a1.1">
<b>A1.1 <c>A1.1</c></b>
</section>
<section id="a1.2">
<b>A1.2 <c>A1.2</c></b>
<section id="a1.2.1">
<b>A1.2.1</b>
</section>
<b>A1.2 <c>A1.2</c></b>
</section>
</section>
<section id="a2">
<b>A2 <c>A2</c></b>
</section>
</root>
는, 위의 분명하지 않은 : 예를 들어
아래 #a1
노드에 대한 참조 주어진, 난 단지 "A1"과 "A1"텍스트 노드를 찾을 필요 구성 데이터입니다. 특히 id
속성은 실제 문서에 존재하지 않을 수 있습니다.
지금 섹션 내의 모든 텍스트 노드를 찾은 다음 내가 원하지 않는 사람을 빼 루비를 사용하는 것입니다 위해 마련 중에 최고 :
def own_text(node)
node.xpath('.//text()') - node.xpath('.//section//text()')
end
doc = Nokogiri.XML(mydoc,&:noblanks)
p own_text(doc.at("#a1")).length #=> 4
은 내가 공예 수 단일 XPath 1.0 표현식을 사용하여 이러한 노드를 직접 찾을 수 있습니까? 뭔가 같은 :
.//text()[ancestor::section = self] # self being the original context node
'id' 속성에 의존하지 않고 이것을 할 수 있습니까? 그 점을 명확하게 설명하고 설명하기위한 데모 문서 일뿐입니다. 구분 속성이없는 중첩 된 ''요소를 상상해보십시오. –
Phrogz
예,이 답변의 업데이트를 참조하십시오. –
니스; 나는'count()'를 사용하는 것을 잊어 버렸지 만, 일단 그것을 사용하기 시작했다 할지라도, 당신이 어떻게 그 카운트를 "저장"하는지를 알 수 없었다. 여전히 Ruby/XPath (새 컨텍스트를 시작할 때 고유 노드가'.'이므로)에서 직접 작동하지 않지만 일반 XPath에 대한 질문에 대답하는 것으로 보입니다. – Phrogz