HtmlAgilityPack:创建HTML文本节点

17
在HtmlAgilityPack中,我想要创建HtmlTextNode,它是一个具有自定义InnerText的HtmlNode(继承自HtmlNode)。
HtmlTextNode CreateHtmlTextNode(string name, string text)
{
     HtmlDocument doc = new HtmlDocument();
     HtmlTextNode textNode = doc.CreateTextNode(text);
     textNode.Name = name;
     return textNode;
}

问题在于上述方法后,textNode.OuterHtmltextNode.InnerHtml会等于"文本"。
例如:CreateHtmlTextNode("title", "blabla")将生成:textNode.OuterHtml = "blabla"而不是<Title>blabla</Title>
有没有更好的方法来创建HtmlTextNode
2个回答

23
以下代码创建一个带有内容的外层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;

希望它有所帮助。

20
一个 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(),以确保特殊字符得到正确编码。


1
小修正:HtmlEncode是静态的,所以应该是HtmlDocument.HtmlEncode(text)。谢谢,现在可以用了! - Nizar Blond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接