XPathを使用したリンクテキストでリンクURLを見つけるにはどうすればよいですか?


88

整形式のXHTMLページがあります。リンクされているテキストがあるときに、リンクのリンク先URLを見つけたい。

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

私が欲しいのXPath与えられた場合という表現なprogramming questions site、それは与えるだろうhttp://stackoverflow.comと私はそれを与える場合はnewsそれが得られますhttp://cnn.com

回答:


141

次のようなものである必要があります。

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

73
xpathを学ぶことはありますか?クエリを見ると、それはとても明白で理解しやすいです...しかし、私は自分でクエリを書くことは決してできません
flybywire 2009年

4
@flybywireこのスタンフォードの無料のデータベース入門コースを読んだ場合、XMLとXPathに関する優れたセクションがあります。
James P.

4
text()の代わりに、「。=」を使用できます。たとえば、// a [。= 'Register here']
danpop 2016

1
テキストがわからない場合はどうなりますか?httpまたは特定のキーワードを含むノードを選択できますか?
アルストン2018

77

あなたには遅すぎますが、同じ質問を持つ他の人には...

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

もちろん、「プログラミング」は任意のテキストフラグメントにすることができます。


1
これはもっと一般化されています。良いシェア
アーロンギリオン2015年

これは大文字と小文字が区別されます。ここでのケースを無視できますか?
user3060430

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

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


6

角括弧内のフレーズは、SQLのWHERE句と考えてください。

したがって、このクエリは、「任意の場所(//)に表示される「a」タグの「href」属性(@)を選択しますが、「a」タグのテキストコンテンツが「」と等しい場合(括弧で囲まれたフレーズ)のみを示します。プログラミング質問サイト '"。


こんにちはピーター、xpathクエリを学ぶためのチュートリアルサイトはありますか?
Karim Narsindani 2015

4

大文字と小文字を区別しない包含については、以下を使用してください。

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

translateは、PROGRAMMINGの大文字を小文字のプログラミングに変換します。


回答として「ありがとう」を追加しないでください。サイトにしばらく投資すれば、好きな答えに賛成するのに十分な特権を得ることができます。これは、スタックオーバーフローの言い方です。
sklivvz 2013年

5
「ありがとう」は私の「答え」ではありませんでした。ある意味で、私は自分が改善した上記の答えを信用していました。
アブド2013

1

htmlアジリティパックを使用している場合は、getattributeValueを使用します。

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.