問題タブ [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.

0 投票する
2 に答える
9885 参照

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()

0 投票する
3 に答える
1734 参照

python-2.7 - xpath の子孫と子孫または自己の動作は完全に異なります

指定された id、つまり 22 と 222 を持つ div の子孫の中からすべての秒の tds を見つけようとします。私の頭に浮かぶ最初の解決策は次のとおりです。

ただし、最初のテーブル セル、つまり 22 のみが選択されますが、22 と 222 の両方は選択されません。次に、// を /descendant-or-self::node()/ に置き換えて、同じ結果を得ました (明らかに)。しかし、「-or-self」を削除すると、xpath 式が期待どおりに機能し始めました

ここにテストHTMLがあります

div が含まれているかどうかに関係なく、すべての tds が div 要素の子孫であるため、両方の式が同じように機能しないのはなぜでしょうか。