2009-08-04 16 views
1

Hey, ich durchquere alle Links in meiner eigenen Codebasis und ändere sie von <a href="x"> zu <asp:HyperLink> aus Lokalisierungsgründen. Ich benutze das HTMLAgilityPack für diese (und andere Dinge) und ich möchte nur das OuterHtml-Objekt für die Links ändern, die ich finde..aber es ist schreibgeschützt?HTMLAgility Pack - OuterHtml Schreibgeschützt?

Ich bin neu in der HAP, muss ich einen neuen Knoten erstellen und den alten löschen? Ist jemand darauf gestoßen?

Danke!

Antwort

1

ich am Ende mit ...

node.ParentNode.ReplaceChild(HtmlNode.CreateNode(HrefToAspLinkText(node.OuterHtml)), node) 

hmm. gearbeitet, aber hässlich.

+1

Das nervt mich seit langem, die Hilfe und Tooltips für OuterHtml sagen, dass Sie es einstellen können, aber Sie können nicht. Dieser (etwas hässliche) Weg funktioniert - danke! –

+0

Überprüfen Sie meinen Kommentar für eine "bessere" Lösung. – jessehouwing

1

Warum sollten Sie das HTML Agility Pack verwenden, wenn Sie das gesamte Dokument als String behandeln? Suchen Sie stattdessen nach Tags, ersetzen Sie diese und schreiben Sie das Dokument zurück.

var doc = new HtmlDocument(); 
doc.LoadHtml(yourString); // or doc.Load(yourStream); 

var links = doc.DocumentNode.Descendants("a"); 
foreach (var link in links) 
{ 
    link.Parent.Replace(ConvertLink(link), link); 
} 
string newDocument = doc.DocumentNode.OuterHtml; // Or doc.Save(); 

Und Ihre ConvertLink würde wie folgt aussehen:

public HtmlNode ConvertLink(HtmlNode aTag) 
{ 
    var link = HtmlNode.Create("asp:HyperLink"); 
    link.Attributes.Add(...); 
    return link; 
} 

(nicht kompiliert, so könnten einige Optimierungen benötigen).