xpath
2011-12-19 8 views 3 likes 
3

私はXPathを使ってHTMLから表を抽出しています。私は私の要素の属性値の半分しか知りませんが、私が知っている半分を見つけて残りを無視するためにxpath式を書こうとしているという独自の状況があります。 W3学校を探した後、例XPath構文 - 未知の要素値

HtmlNodeCollection cols = doc.DocumentNode.SelectNodes("//td[@class='Iknowthis_DontKnowThis']"); 

のために私はワイルドカード演算子は、未知のノードを選択するがあることがわかりますが、私はこのような状況でそれらを使用する方法を述べている何かを見つける傾けます。

アイブ氏は、このような何かを試してみましたが、仕事に何かを得るカント:

doc.DocumentNode.SelectNodes("//td[@class='Iknowthis_.*']"); 

たぶん、そのことはできませんか?よく分かりません?

+0

あなたは何 'xpath'ライブラリですどのようなプログラミング言語を使用して? – MattH

+0

申し訳ありませんが、私はHtmlAgilityPackでC#を使用しています – Ron

+0

ようこそstackoverflowへ!説明をコメントするのではなく、質問に編集や更新(コメントに応じてなど)を行うと、現在および将来の読者のために質問を理解しやすくすることができます。 (サイトFAQ(http://stackoverflow.com/faq#howtoask)を参照してください) – MattH

答えて

1

私はw3schools xpathドキュメントを何度も読んできましたが、(述語の平等性をテストしながら)部分文字列照合にワイルドカードを使うことはできません。

string functions string functionsの一部を使用できます。例えば:

"//td[starts-with(@class,'Iknowthis_')]" 

あなたは、名前空間、(例えばfn:starts-with)でstarts-with機能を接頭辞が必要になることがあり、それは実装に依存します。

パターンを取るmatches文字列関数もあります。

+0

Mattさんに感謝します。この情報は私にソリューションを含む別のスレッドに導かれました: // * [contains – Ron

+1

私はw3schoolsの嫌悪者のキャンプには本当にいないが、おそらくそれらを参照してもらってしまうだろう(http://w3fools.com/を参照) 。ですから、これと同等のw3c文書http://www.w3.org/TR/xpath/#section-String-Functionsがあります。また、starts-with関数の前にネームスペースを付ける必要はありません。基本的なXPath 1.0文字列関数です。 – Tao

+1

@タオ:本当ですか?まあ、私はこの現象に遭遇することはありません。そのような観点から、w3schoolは「xpath」をGoogleで検索すると最初の2回のヒットがあり、[w3.org](http://www.w3.org/TR/xpath/#section-文字列関数)docsは特に読めるものではありません。 – MattH

0

はあなたが機能を使用できるかもしれ '(含まれています)':

//td[contains(@class, 'Iknowthis')] 

も、あなたはなめらかを除外する関数 'ではないが()' を使うことができます。

//td[not(contains(@class, 'Iknowthis'))] 
関連する問題