xpathをjqueryで選択可能なCSS3形式に変換するには、javascriptまたはjqueryライブラリが必要です

StackOverflow https://stackoverflow.com/questions/1652759

  •  22-07-2019
  •  | 
  •  

質問

xpathを次のように変換するにはどうすればよいですか

/html/body/div[3]/ul/li[1]/a[5]

html > body > div[3] > ul > li[1] > a[5]

インデックスは CSS3 セレクターではサポートされていないと思います...それでは、これにどう対処すればよいでしょうか?

役に立ちましたか?

解決

Sizzle / jQueryがCSS3セレクターを適用できない場合は、を使用することをお勧めしますjPathの元のリリースの一部であったXPathプラグイン(実際に使用した人が少ないため削除されました)。

ブラウザでの

XPathの実装は、CSSエンジンよりも高速になる傾向があります。また、JS解析& XPath式をCSS3に変換し、ブラウザが実装できるもの(通常はJS支援のCSS2.1セレクタ)にjQueryを追加すると、XPathを直接実行するよりも非常に遅くなりますブラウザ。

それだけでなく、XPathでできること、CSSでできないこともあります。例:
// h3 [class =" blog-title"] /../../ div [class =" blog-entry"] // input [fn:floor(value)& gt; 3]
XPathの実行は過度に複雑ではありませんが、CSSだけでは不可能です-DOMに戻り、式の一部として関数を実行することは、CSS3でも(私の知る限りでは)できません。

他のヒント

Selenium 1′のCSSロケーターエンジンはCSSQueryからSizzle、jQueryのCSSセレクターライブラリに移動しました。 変換できます

div[3]/ul/li[1]/a[5] 

to

css=div:nth(3)>ul>li:nth(1)>a:nth(5)

and

//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3] 

に変換できます

css=h3.blog-title:parent(div.blog-entry) input[value=3]

ただし // input [@ value> 3] は不可能またはトリッキーではありません 詳細については、 https://github.com/jquery/sizzle/wiki/Sizzle-をご覧ください。ホーム

IE での xpath の実装は非常に遅いです。IE6 ではさらに恐ろしいほど遅いため、ほとんどの場合、正規表現などに基づいた CSS セレクターを使用する傾向があります。sizzle や最新のものは qwery などです。CSS で使用するインデックス選択の場合はセレクター :nth-child(n)

a[5] = :nth-child(5)

0 で始まるか 1 で始まるか思い出せないので、4 である可能性もあります。

また、選択している親内に異なるタイプの子がある場合は、次のように使用できます。 :nth-of-type() これは、指定されたタイプのみを選択します。あなたの場合:

a:nth-of-type(5)

かなり検索して、最終的にこれら2つのライブラリを見つけました。それが私のように失われた誰かを助けることを願っています:

  1. ジェームズ・パドルシーの CSS2XPATH 時間
  2. css2xpath -汎用CSSからXPathへのトランスフォーマー

これは非常にニッチな領域なので、コミュニティがこれを編集することを歓迎します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top