2

私の XPath'//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']'は正常に動作していますが、このタグの後に'#document'テキストが存在し、この後'#document'に html タグがあるため、XPath 式を として拡張すると'//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']/#document/html'、次のように例外がスローされます。

原因: class org.jaxen.saxpath.XPathSyntaxException: //div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']/#document: 70: '. '、'..'、'@'、'*'、QName.

このための XPath の書き方を教えてください。

ありがとう、ダナンジェイ

4

4 に答える 4

2

私が収集できる限りでは、XPath は s に分類されません。ご覧のとおり、XPathiframeは HTML ドキュメントなどの特定の XML ドキュメントに関連付けられており、それに対して評価することができます。ブラウザでは、は別のドキュメントとしてカウントされます。ノード自体は親ドキュメントの一部です。しかし、これは完全に分離された別のドキュメント ( のコンテンツ)へのポインタにすぎません。iframe<iframe>iframe

それがこの電子メール チェーンの主旨のようであり、Firefox で実装されているように、XPath 式が呼び出しdocument.evaluate(つまり、特定のオブジェクトのメンバー)によって評価されるという事実から自然に外れているようです。documentこれは、 s と XPath を定義するさまざまな仕様が重複しているため、単一の XPath 式でそのドキュメント境界をトラバースすることが除外されていることを示唆していiframeます。少なくとも、それは Mozilla の解釈のようです。

ただし、これはすべて、Firefox の仕様の特定の実装に基づく当て推量であることに注意してくださいXPath。この制限は、他のブラウザーに適用される場合と適用されない場合がありますが、適用されると思われます。

iframeまた、@singaravelan などによって投稿されたソリューションで示唆されているように、Selenium で XPath 式を実行するために、あるドキュメント (親 HTML ページ) から別のドキュメント (それ自体) にコンテキスト を切り替える必要がある理由も説明しているようです


1ただし、HTML ドキュメントが魔法のようなものである場合に限ります。(すべての HTML ドキュメントが整形式の XML であるとは限りません。ブラウザーは XML パーサーよりもはるかに寛容です。@MathiasMüller のコメントを参照してください。)

于 2016-01-25T21:14:21.747 に答える
0

ソースXMLは表示されていませんが、確かにわかっていることの1つは、「#document」という要素が含まれていないことです。これは、有効な要素名ではないためです。同じ理由で、XPath式で「#document」という要素を要求することはできません。

于 2012-05-21T09:02:21.840 に答える
0

別のXPathで使用して、次の単語をバイパスできます:#document with the word:descendant例:

//div[@id='sharetools-container-div']/iframe[@id='sharetools-iframe']/descendant::*[1]

またはそのようなもの。それはあなたが内側のhtmlに何を望むかによります。

于 2012-05-21T20:07:48.260 に答える