2011-05-09 97 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"; 
}