Ответ 1
Чтобы создать новый node, используйте метод HtmlNode.CreateNode()
factory, не используйте конструктор напрямую.
Этот код должен работать для вас:
var htmlStr = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
var doc = new HtmlDocument();
doc.LoadHtml(htmlStr);
var query = doc.DocumentNode.Descendants("b");
foreach (var item in query.ToList())
{
var newNodeStr = "<foo>bar</foo>";
var newNode = HtmlNode.CreateNode(newNodeStr);
item.ParentNode.ReplaceChild(newNode, item);
}
Обратите внимание, что нам нужно вызвать ToList()
в запросе, мы будем модифицировать документ, чтобы он не сработал, если мы этого не сделаем.
Если вы хотите заменить эту строку:
"some text <b>node</b> <strong>another node</strong>"
Проблема заключается в том, что он больше не является одним node, а серией узлов. Вы можете разобрать его с помощью HtmlNode.CreateNode()
, но в конце вы ссылаетесь только на первую node последовательности. Вам нужно будет заменить родительский node.
var htmlStr = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
var doc = new HtmlDocument();
doc.LoadHtml(htmlStr);
var query = doc.DocumentNode.Descendants("b");
foreach (var item in query.ToList())
{
var newNodesStr = "some text <b>node</b> <strong>another node</strong>";
var newHeadNode = HtmlNode.CreateNode(newNodesStr);
item.ParentNode.ReplaceChild(newHeadNode.ParentNode, item);
}