2012-07-31 73 views
0

我正在處理一個小型項目,並且遇到了一些問題,希望您能幫助我。HTML敏捷包鏈接更正

我得到了加載指定網址這個基本的幾行字,並採取了一些標籤:

var webGet2 = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = webGet2.Load(pattern); 
var htmlMatches = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']"); 

我收到的採集後,我需要運行一個foreach循環 ,可以採取一切HREFSRC鏈接,使他們有效的,因爲當我下載源代碼,鏈接貌似/folder/folder/image.jpg 我想補充http://www.site.com每個鏈接之前有

我已經用正則表達式構建了這個項目,並沒有這樣做的問題,但是HTML敏捷性並沒有讓我的想法變得直截了當。

謝謝!

+0

可能重複[C#轉換相對於絕對鏈接在HTML字符串](http://stackoverflow.com/questions/3836644/c-sharp-convert-relative -to-absolute-links-in-html-string) – Ani 2012-07-31 20:07:09

回答

2

因此,你想搜索某些節點的某些屬性,包含相對URL並將其更改爲絕對URL?你可以這樣做:

static void AdjustAttributes(HtmlNode root, string baseUrl, string attrName) 
{ 
    var query = 
     from node in root.Descendants() 
     let attr = node.Attributes[attrName] 
     where attr != null 
     select attr; 
    foreach (var attr in query) 
    { 
     var url = GetAbsoluteUrlString(baseUrl, attr.Value); 
     attr.Value = url; 
    } 
} 

static string GetAbsoluteUrlString(string baseUrl, string url) 
{ 
    var uri = new Uri(url, UriKind.RelativeOrAbsolute); 
    if (!uri.IsAbsoluteUri) 
     uri = new Uri(new Uri(baseUrl), uri); 
    return uri.ToString(); 
} 
var web = new HtmlWeb(); 
var doc = web.Load(pattern); 
var selectedNodes = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']"); 
foreach (var node in selectedNodes) 
{ 
    AdjustAttributes(node, url, "href"); 
    AdjustAttributes(node, url, "src"); 
} 
+0

嗨,Jeff,非常感謝。 但我需要修復鏈接後,我拉出**李** s 我需要的內容,我該怎麼做? – 2012-07-31 21:39:57

+0

哦,我誤解了你的問題。我以爲你試圖獲得所有這些鏈接。所以你的目標是讓所有的相關網站都成爲絕對的網址。應該很簡單。 – 2012-07-31 21:50:13

+0

我試圖做,因爲它顯示在這裏 - [鏈接](http://htmlagilitypack.codeplex.com/wikipage?title=Examples&referringTitle=Home),但我有** FixLink(att)的問題; **它保持稱其不含定義。所以我試着用** this.AbsoluteUrlByRelative(att.Value)替換它; **正如我在其他地方看到的,它一直說着同樣的東西。我知道我錯過了一些東西,但我不知道是什麼:\ – 2012-07-31 21:57:54