2013-10-28 27 views
0

由於性能,我正在將C#腳本解析爲PHP腳本。使用來自字符串標記的HTML循環

這是我遇到麻煩了PHP源:我是有

$dom = new DOMDocument; 
$dom->loadHTML($message); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    if ($node->hasAttribute('href')) { 
     $link = $node->getAttribute('href'); 
     if ((strpos($link, 'http://') === 0) || (strpos($link, 'https://') === 0)) { 
      $add_key = ((strpos($link, '{key}') !== false) || (strpos($link, '%7Bkey%7D') !== false)); 
      $node->setAttribute('href', $url . 'index.php?route=ne/track/click&link=' . urlencode(base64_encode($link)) . '&uid={uid}&language=' . $data['language_code'] . ($add_key ? '&key={key}' : '')); 
     } 
    } 
} 

的問題是getElementByTagName一部分。

正如說here,我應該使用htmlagilitypack。到目前爲止我的代碼是這樣的:

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(leMessage); 

leMessage是一個包含HTML的字符串。到現在爲止還挺好。唯一的問題是HtmlAgillityPack中沒有getElementsByTag函數。而在正常的HtmlDocument(沒有包),我不能使用一個字符串作爲HTML頁面的權利?

那麼有誰知道我應該怎麼做才能做到這一點?我現在唯一能想到的是在windows窗體中創建一個webbrowser,並將文檔內容設置爲leMessage,然後從那裏解析它。但是,個人意見,我不喜歡這種解決方案......但如果沒有另一種方式......

回答

1

以下是當我跟隨你的鏈接時彈出的第一個頂級頁面代碼塊並點擊「例子」:

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    HtmlAttribute att = link["href"]; 
    // DO SOMETHING WITH THE LINK HERE 
} 
doc.Save("file.htm"); 

請做你的未來自己的谷歌搜索。

+0

哇,我沒有看到。我很抱歉。不過謝謝你花時間告訴我:D – Mathlight