HTML Agility Pack - ReplaceNode не меняет InnerHTML тела - PullRequest
2 голосов
/ 07 апреля 2010

У меня есть

Кузов:

<body><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent leo leo, ultrices eu venenatis et, rutrum fringilla dolor.</p></body>

Код:

HtmlNode body = doc.DocumentNode.SelectSingleNode("//body");

Dictionary<HtmlNode, HtmlNode> toReplace = new Dictionary<HtmlNode, HtmlNode>();

// I do some logic here adding nodes to the toReplace dictionary.

foreach (HtmlNode replaceNode in toReplace.Keys)
{
    replaceNode.ParentNod.ReplaceChild(toReplace[replaceNode], replaceNode);
}

После того как я это сделаю, InnerHtml узла body останется таким же, как и в начале, хотя OutterHtml или InnerText показывают хороший результат. Что-то не так с моим кодом?

Результат:

// body.InnerHtml
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent leo leo, ultrices eu venenatis et, rutrum fringilla dolor.</p>

// body.OutterHtml
<body><p>Lorem ipsum dolor sit amet...</p></body>

1 Ответ

0 голосов
/ 09 апреля 2010

Я думаю, что это может быть связано с тем, как вы добавляете узлы для замены старых узлов.Посмотрите, работает ли это решение для усечения текстового узла.Я сделал быстрый тест, и все трое дали мне одинаковые результаты.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlString);
HtmlNode body = doc.DocumentNode.SelectSingleNode("//body");

foreach (var paragraph in body.Descendants("p"))
{
    paragraph.InnerHtml = paragraph.InnerHtml.Substring(0, 25) + "...";
}

Console.WriteLine(body.InnerHtml);
Console.WriteLine(body.InnerText);
Console.WriteLine(body.OuterHtml); 
...