Htmlagilitypack: создать html-текст node
В HtmlAgilityPack я хочу создать HtmlTextNode
, который является HtmlNode
(наследует от HtmlNode), который имеет пользовательский InnerText.
HtmlTextNode CreateHtmlTextNode(string name, string text)
{
HtmlDocument doc = new HtmlDocument();
HtmlTextNode textNode = doc.CreateTextNode(text);
textNode.Name = name;
return textNode;
}
Проблема заключается в том, что после метода выше textNode.OuterHtml
и textNode.InnerHtml
будут равны "text".
например. CreateHtmlTextNode("title", "blabla")
будет генерировать:
textNode.OuterHtml = "blabla"
вместо <Title>blabla</Title>
Есть ли лучший способ создать HtmlTextNode
?
Ответы
Ответ 1
A HTMLTextNode
содержит только текст, никаких тегов.
Это похоже на следующее:
<div> - HTML Node
<span>text</span> - HTML Node
This is the Text Node - Text Node
<span>text</span> - HTML Node
</div>
Вы ищете стандартный HtmlNode.
HtmlDocument doc = new HtmlDocument();
HtmlNode textNode = doc.CreateElement("title");
textNode.InnerHtml = HtmlDocument.HtmlEncode(text);
Обязательно вызовите HtmlDocument.HtmlEncode()
в добавляемом тексте. Это гарантирует, что специальные символы будут правильно закодированы.
Ответ 2
Следующие строки создают внешний html с содержимым
var doc = new HtmlDocument();
// create html document
var html = HtmlNode.CreateNode("<html><head></head><body></body></html>");
doc.DocumentNode.AppendChild(html);
// select the <head>
var head = doc.DocumentNode.SelectSingleNode("/html/head");
// create a <title> element
var title = HtmlNode.CreateNode("<title>Hello world</title>");
// append <title> to <head>
head.AppendChild(title);
// returns Hello world!
var inner = title.InnerHtml;
// returns <title>Hello world!</title>
var outer = title.OuterHtml;
Надеюсь, что это поможет.