2009-05-27 17 views
75

私はよく形成されたXHTMLページを持っています。 リンクされているテキストを持っている場合、リンクのリンク先URLを探したいと思います。私はXPath表現をしたいリンクテキストをリンクテキストでXPathとどのようにして見つけることができますか?

<a href="http://stackoverflow.com">programming questions site</a> 
<a href="http://cnn.com">news</a> 

programming questions siteを与えられた場合、それはhttp://stackoverflow.comを与えるだろうと私はそれをnewsを与える場合、それはhttp://cnn.comを与えるようにします。

 
//a[text()='text_i_want_to_find']/@href 

答えて

123

は、のようなものであるべき。

+60

私はxpathを学びますか?私はクエリを見ると分かりやすく分かりやすいですが、私は自分で書くことはできません – flybywire

+3

@flybywireこのStanfordの無料のIntroduction to Databasesコースは、XMLとXPathに関する良いセクションがあります。 –

+2

text()の代わりに "。="を使うことができます。例えば//a[.'Register here '] – danpop

8
//a[text()='programming quesions site']/@href 

基本的に必要なテキストを持っているアンカーノード<a>を識別し、href属性を抽出します。

6

角括弧内の句は、SQLのWHERE句と考えることができます。

このクエリでは、「どこでも(//)表示されますが、括弧で囲まれた語句の「a」タグのテキストコンテンツが表示される「a」タグの「href」属性(@ 「プログラミングの質問サイト」と同じです。もちろん

+0

こんにちはPeter、xpath queryを学ぶためのチュートリアルサイトはありますか? –

62
遅すぎるあなたのために、同じ質問を持つ他の誰のための

...

//a[contains(text(), 'programming')]/@href 

、「プログラミング」は任意のテキスト断片であってもよいです。

+1

これはより一般化されています。良い株 –

1

あなたがHTMLの敏捷性パックの使用getattributeValueを使用している場合:

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href 

翻訳小文字プログラミングするためのプログラミングに大文字に変換:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","") 
3

ケース小文字を区別しないが含まれているため、以下を使用します。

+0

答えとして「感謝」を加えないでください。サイトにある程度の時間を投資すれば、あなたは好きな答えをupvoteするのに十分な[特権](http://stackoverflow.com/privileges)を得ることができます。これはスタックオーバーフローによる感謝の言葉です。 – Sklivvz

+5

"ありがとう"は私の "答え"ではありませんでした。私は、ある意味で、私が改善した以上の答えに信用を与えていました。 – Abdo

関連する問題