HTMLAgility Pack - OuterHtml Только для чтения? - PullRequest
1 голос
/ 04 августа 2009

Привет, я перебираю все ссылки в моей собственной кодовой базе и меняю их с <a href="x"> на <asp:HyperLink> по причинам локализации. Я использую HTMLAgilityPack для этого (и других вещей), и я хотел бы просто изменить объект OuterHtml для ссылок, которые я нахожу ... но это только для чтения?

Я новичок в HAP, мне нужно создать новый узел и удалить старый? Кто-нибудь сталкивался с этим?

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 мая 2012

Зачем использовать HTML Agility Pack, если вы рассматриваете весь документ как строку. Вместо этого найдите теги и замените их, а затем запишите обратно документ.

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

И ваш ConvertLink будет выглядеть так:

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

(не скомпилировано, поэтому может потребоваться некоторая настройка).

1 голос
/ 04 августа 2009

Я закончил с использованием ...

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

гм. работал, но некрасиво.

...