問題タブ [descendant-or-self]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - XQuery: // 対 descendant-or-self::node()
最近、HTML ドキュメントのノードで XQuery を評価する必要がありました。基本的に、body 要素の最初の子から href 属性を持つすべての要素を選択する必要がありました。説明するために少し例を追加しました。
この場合、望ましい抽出結果は明らかに次のとおりです。
私の最初のアイデアは、次の//body/*[1]//*[@href]
理由で使用することでした。
//body
どこにいても body 要素に一致します/*[1]
body 要素の最初の子に一致します//*[@href]
現在の要素のすべての子孫または自分自身に一致します
私はそれがうまくいくと考えましたが、提供された例では、XQuery は結果を返しません。
ただし、少し読んだところ、次のことがわかりました (ソース: http://www.keller.com/xslt/8/ ):
そこで、XQuery を に変更したところ//body/*[1]/descendant-or-self::node()[@href]
、今回は正しい結果が得られました。
私の質問: // と descendant-or-self::node() の違いは何ですか? ここで見つけたもの ( xpath の //node と /descendant::node の違いは何ですか? ) とここ ( http://www.w3.org/TR/xpath/#axes ) は次のように述べています。
//
の略です/descendant-or-self::node()/
。たとえば、//para
は の略です/descendant-or-self::node()/child::para
。
//
これにより、と は交換可能ではないと結論付けられ/descendant-or-self::node()
ます (おそらく、最後に終了/
するためですか?) /descendant-or-self::node()
。
python-2.7 - xpath の子孫と子孫または自己の動作は完全に異なります
指定された id、つまり 22 と 222 を持つ div の子孫の中からすべての秒の tds を見つけようとします。私の頭に浮かぶ最初の解決策は次のとおりです。
ただし、最初のテーブル セル、つまり 22 のみが選択されますが、22 と 222 の両方は選択されません。次に、// を /descendant-or-self::node()/ に置き換えて、同じ結果を得ました (明らかに)。しかし、「-or-self」を削除すると、xpath 式が期待どおりに機能し始めました
ここにテストHTMLがあります
div が含まれているかどうかに関係なく、すべての tds が div 要素の子孫であるため、両方の式が同じように機能しないのはなぜでしょうか。