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上のコードの括弧の部分だけです。