2011-05-09 123 views
6

我試圖用h2標籤替換我所有的h1標籤,並使用HtmlAgility包。替換HtmlAgility中的標籤

我這樣做:

var headers = doc.DocumentNode.SelectNodes("//h1"); 
if (headers != null) 
{ 
    foreach (HtmlNode item in headers) 
    { 
     //item.Replace?? 
    } 
} 

和我被困在那裏。我已經試過這樣:

var headers = doc.DocumentNode.SelectNodes("//h1"); 
if (headers != null) 
{ 
    foreach (HtmlNode item in headers) 
    { 
     HtmlNode newNode = new HtmlNode(HtmlNodeType.Element, doc, item.StreamPosition); 
     newNode.InnerHtml = item.InnerHtml; 
     // newNode suppose to set to h2 
     item.ParentNode.ReplaceChild(newNode, item); 
    } 
} 

問題存在,我不知道如何創建一個新的H2,得到所有的屬性等 我敢肯定,那裏有一個簡單的方法來做到這一點,任何想法?

回答

9
var headers = doc.DocumentNode.SelectNodes("//h1"); 
     if (headers != null) 
     { 
      foreach (HtmlNode item in headers) 
      { 
       item.Name = "h2" 
      } 
     } 
+0

繼續我的冒險探索HtmlAgilityPack ..有辦法,迫使所有的屬性都被包裹在雙引號? 我發現'OptionOutputOptimizeAttributeValues',但這只是刪除所有引號。 – 2011-05-09 15:14:47

+0

我不知道。嘗試在HtmlAgilityPack官方論壇中提問。 http://htmlagilitypack.codeplex.com/discussions – VikciaR 2011-05-10 06:11:04

1

類似的方法使用替換後人標籤代替的SelectNodes的:

IEnumerable<HtmlNode> tagDescendants = doc.DocumentNode.Descendants("h1"); 
foreach (HtmlNode htmlNode in tagDescendants) 
{ 
    htmlNode.Name = "h2"; 
}