xmlns
ルートに次のコード サンプルがあります。
<ol class="stan">
<li>Item one.</li>
<li>
<p>Paragraph one.</p>
<p>Paragraph two.</p>
</li>
<li>
<pre>Preformated one.</pre>
<p>Paragraph one.</p>
</li>
</ol>
<li>
最初のアイテムが存在するタグのタイプ、またはタグがない、つまりサンプルの最初のタイプに応じて、最初のアイテムに対して異なる操作を実行したいと考えています<li>
。
編集:
その仕事を遂行する上での私の論理は間違っていることが判明しました。
<li>
最初のリスト項目のように子孫を持たない を照会するにはどうすればよいですか?
私は否定を試みました:
@doc.xpath("//xmlns:ol[@class='stan']//xmlns:li/xmlns:*[1][not(p|pre)]")
それは私が求めていると思うものとは正反対です。
正しい解が見つからないので、式を複雑にしていると思います。
アップデート:
Navin Rawat がコメントでこれに答えました。正しいコードは次のようになります。
@doc.xpath("//xmlns:ol[@class='stan']/xmlns:li[not(xmlns:*)]")
修正:
正解問題には、XPath 検索と Nokogiri メソッドの両方が含まれます。
上記のxhtml
コードを使用して最初の子孫を検索するにはどうすればよいxpath
ですか? そしてxpath
、条件ステートメントでどのように使用しますか。たとえば、次のようになります。
@doc.xpath("//xmlns:ol[@class='stan']/xmlns:li").each do |e|
if e.xpath("e has no descendants")
perform task
elsif e.xpath("e first descendant is <p>")
perform second task
elsif e.xpath("e first descendant is <pre>")
perform third task
end
end
完全なコードを求めているわけではありません。Nokogiri
上のコードの括弧の部分だけです。