私のXMLドキュメントには任意にネストされたセクションがあります。特定のセクションへの参照を考えると、サブセクションを含まないTextNode
そのセクションのすべてのを見つける必要があります。
たとえば、#a1
以下のノードへの参照を考えると、「A1」と「A1」のテキストノードのみを見つける必要があります。
<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>
不明な点がある場合は、上記のデータを作成します。特にid
属性は、実際のドキュメントには存在しない場合があります。
今のところ私が思いついた最善の方法は、セクション内のすべてのテキストノードを見つけてから、Rubyを使用して不要なノードを差し引くことです。
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
これらのノードを直接見つけるために単一のXPath1.0式を作成できますか?何かのようなもの:
.//text()[ancestor::section = self] # self being the original context node