2012-05-30 7 views
5

すべて要素、テキストノード、およびコメントノードを選択するXPath式は、ドキュメントに表示される順序と同じですか?すべての要素、テキストノード、およびコメントノードをソース順に選択するXPath式

次効果的にすべての要素が、を選択していないテキストノード、コメント・ノード:

var result = document.evaluate('//*', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), 
    index = -1; 
while (++index < result.snapshotLength) { 
    console.log(result.snapshotItem(index)); 
} 

が、それは以下のような何かをすることは可能ですか? (注:これは機能しない擬似コードです)。

document.evaluate('//* and text() and comment()'); 

答えて

5
//node() 

は何かの子であるすべてのノードを選択:つまり、すべての要素を、

+0

うわ!短くて甘い。これは素晴らしい作品です。ルート要素を選択します.HTML文書でもDOCTYPE(これはわかりませんでした)でも可能です。 –

+0

'document.evaluate( '// node()'、document、null、XPathResult.FIRST_ORDERED_NODE_TYPE、null).singleNodeValue === document.doctype'です。 –

+1

DOCTYPEノードを選択すると、誰かが想像力でXPath仕様を解釈します。 XPathデータモデルにそのようなノードはありません。 –

1

XML文書内のテキストノードとコメントノードでテストされています。そこより効率的なアプローチであるが、これは労働組合を使用して、私のためにドキュメント順に要素、テキスト、コメントノードを返すことがあります。

//*|//*/text()|//*/comment() 
+0

質問はHTML(XMLとは限らない)に関するもので、このスタックオーバーフローページのコンソールで試すことができます例。あなたの答えはうまくいくようです。 XPath n00bとして、私は '|'について知りませんでした - ありがとう! –

+1

ああ、その場合は、 'union'として' | 'を歓迎し、XPATH 1.0ではクエリのルートからしか適用されず、途中から"パス "を使用することはできません。 – MattH

+2

ああ、あなたのXPATHの知識をブートストラップする良い方法は、タグのトップユーザーによる答えのいくつかをチェックすることです:http://stackoverflow.com/tags/xpath/topusers – MattH

関連する問題