2012-01-23 9 views
0

私はHtml Agility Packを使用しており、次のHTMLコードからリンクとリンクテキストを抽出しようとしています。 Webページは、リモートページから取得され、全体としてローカルに保存されます。その後、このローカルWebページからリンクとリンクテキストを抽出しようとしています。ウェブページには他のリンクテキストなどのHTMLコードが当然含まれていますが、わかりやすくするためにここでは削除されています。Html Agility Packを使用してWebページからリンク、テキスト、タイムスタンプを抽出する方法

<span class="Subject2"><a href="/some/today.nsf/0/EC8A39D274864X5BC125798B0029E305?open"> 
Description 1 text here</span> <span class="time">2012-01-20 08:35</span></a><br> 
<span class="Subject2"><a href="/some/today.nsf/0/EC8A39XXXX264X5BC125798B0029E312?open"> 
Description 2 text here</span> <span class="time">2012-01-20 09:35</span></a><br> 

しかし、上記のリンクとリンクテキストを抽出しようとするときに最もユニークなコンテンツです。

var linksOnPage = from lnks in document.DocumentNode.SelectNodes("//span[starts-with(@class, 'Subject2')]") 

(lnks.Name == "a" && 
lnks.Attributes["href"] != null && 
lnks.InnerText.Trim().Length > 0) 

select new 
{ 
Url = lnks.Attributes["href"].Value, 
Text = lnks.InnerText 
Time = lnks. Attributes["time"].Value 
}; 

    foreach (var link in linksOnPage) 
     { 
      // Loop through. 
      Response.Write("<link>" + link.Url + "</link>"); 
     Response.Write("<title>" + link.Text + "</title>"); 
     Response.Write("<pubDate>" + link.Time + "</pubDate>"); 
     } 

とそのが働いていない、私は取得しています何もない:

これは私が結果

<link>/some/today.nsf/0/EC8A39D274864X5BC125798B0029E305</link> 
<title>Description 1 text here</title> 
<pubDate>Wed, 20 Jan 2012 07:35:00 +0100</pubDate> 

<link>/some/today.nsf/0/ EC8A39XXXX264X5BC125798B0029E312</link> 
<title>Description 2 text here</title> 
<pubDate> Wed, 20 Jan 2012 08:35:00 +0100</pubDate> 

これは、これまでの私のコードであると見てみたいものです。

ご意見やご協力をいただければ幸いです。

ありがとうございます。

更新:これは、URLやテキストとうまくリンクを選択

var linksOnPage = from lnks in document.DocumentNode.SelectNodes("//span[@class='Subject2']//a") 

:次のコードで:私は、上記の例からのリンクを選択するために、今、正しい構文を取得するために管理しているしかし、どうすればタイムスタンプも手に入れられますか?ある

、このうちタイムスタンプを選択します。

<span class="time">2012-01-20 09:35</span></a> 

各リンクに続きます。上記のように出力ループ内の各リンクでその出力を持っていますか?これに関する助けをありがとう。

+0

var nodes = document.DocumentNode.SelectNodes("//span[@class='Subject2']//a"); foreach (var node in nodes) { if (node.Attributes["href"] != null) { var link = new XElement("link", node.Attributes["href"].Value); var description = new XElement("description", node.InnerText); var timeNode = node.SelectSingleNode( "..//following-sibling::span[@class='time']"); if (timeNode != null) { var time = new XElement("pubDate", timeNode.InnerText); Response.Write(link); Response.Write(description); Response.Write(time); } } } 

このような何かを出力します例: 次のコードで :document.DocumentNode.SelectNodesでlnks( "//スパン[クラス@ = 'Subject2'] // A")から するvar linksOnPage = このURLとテキストでうまくリンクを選択しますが、タイムスタンプを取得するにはどうすればいいですか? つまり、タイムスタンプは 2012-01-20 09:35 の順に選択してください。上記のように出力ループ内の各リンクでその出力を持っていますか? これに関するお手伝いをありがとうございます。 – lars

+0

今後、質問を編集して情報を追加または変更することができ、質問が変更されたことを人々は知ることができます。私は今度あなたのためにやったことがありますが、人々に答えてもらうためにあなたの質問をきれいにすることができます:) – Ktash

+0

okありがとうは分かりませんでした。将来はできますか? – lars

答えて

0

HTMLの例が不正です。そのため、予期しない結果が発生します。

があなたの <span class='Subject2'>内部 <a>を取得する必要がありますあなたの第一及び第二の値を見つけるには - 最初の値が href属性値があり、第二は、アンカーの InnerTextです。 3番目の値を取得するには、 <span class='Subject2'>タグの次の兄弟を取得し、その InnerTextを取得する必要があります。

を参照してください、これはあなたがそれを行うことができる方法:上記のリンクを選択するために、私は今、正しい構文を取得するために管理している

<link>/some/today.nsf/0/EC8A39D274864X5BC125798B0029E305?open</link> 
<description>Description 1 text here</description> 
<pubDate>2012-01-20 08:35</pubDate> 
<link>/some/today.nsf/0/EC8A39XXXX264X5BC125798B0029E312?open</link> 
<description>Description 2 text here</description> 
<pubDate>2012-01-20 09:35</pubDate> 
関連する問題