2012-03-08 100 views
1

我試圖從不同網站獲取PDF鏈接的列表。首先,我使用Web客戶端類來下載頁面源代碼。然後我使用sgmlReader將HTML轉換爲XML。所以對於一個特定的網站,我會得到一個如下所示的標籤:XML:使用C搜索元素以查找特定文本#

<p><a href="pub/1985_to_1997_Board_Action_Summary.pdf">1985 to 1997 Board Action Summary</a></p> 

我需要抓取所有包含「.pdf」的鏈接。很顯然,並非所有網站的佈局都是相同的,所以只需要搜索<p>標籤,就不會變得足夠動態。我寧可不使用linq,但如果必須的話,我會。提前致謝。

回答

3

LINQ使這容易...

var hrefs = doc.Root.Descendants("a") 
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF")) 
    .Select(a => a.Attrib("href")); 

遠離你去! (注:這樣做從內存,所以你可能在一定程度上解決這個問題)

這將打破爲<a/>標籤沒有一個href(錨),但你可以解決這個問題肯定......

+0

XMLDocument類沒有「根」方法。我需要使用不同的課程嗎? – broke 2012-03-08 16:51:27

+0

是的,我指的是XDocument。如果我沒有記錯的話,你可以從XmlDocument實例創建一個XDocument。 – 2012-03-08 17:00:50

+0

如果「a」恰好是小寫字母,這很好。如果它的資本是「A」,它就會中斷。 – broke 2012-03-08 17:35:45

1

我想你有2個選擇。如果您只需要鏈接,則可以使用正則表達式查找以.pdf結尾的字符串的匹配項。如果您需要操作XML結構或從XML中獲取其他值,最好使用XmlDocument並使用XPath查詢來查找與其中的pdf文件鏈接的節點。使用LINQ to XML只需減少需要編寫的代碼行數。

相關問題