2011-05-09 12 views
6

Tüm h1 etiketlerini h2 etiketleriyle değiştirmeye çalışıyorum ve HtmlAgility paketini kullanıyorum. HtmlAgility etiketlerini değiştirme

Bunu yapan:

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

ve orada sıkışmış. i nasıl yeni bir h2 oluşturmak için hiçbir fikrim yok olduğunu

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); 
    } 
} 

sorunu olsun tüm özellikleri vb i emin gidecekseniz yapmak için basit bir yol değilim, herhangi bir fikir: Bu denedim?

cevap

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

HTMLAgilityPack .. tüm zorlamak için bir yol çift tırnak sarılacak olan nitelikleri vardır keşfetmek benim macera devam? 'OptionOutputOptimizeAttributeValues' öğesini buldum ancak sadece tüm alıntıları kaldırır .. –

+0

Bilmiyorum. HtmlAgilityPack resmi forumunda sormaya çalışın. http://htmlagilitypack.codeplex.com/discussions – VikciaR

1

SelectNodes yerine Descendants kullanarak etiketleri değiştirerek benzer bir yaklaşım:

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