首页 文章

Htmlagilitypack:创建html文本节点

提问于
浏览
12

在HtmlAgilityPack中,我想创建 HtmlTextNode ,这是一个 HtmlNode (来自HtmlNode的inherts),它有一个自定义的InnerText .

HtmlTextNode CreateHtmlTextNode(string name, string text)
{
     HtmlDocument doc = new HtmlDocument();
     HtmlTextNode textNode = doc.CreateTextNode(text);
     textNode.Name = name;
     return textNode;
}

问题是 textNode.OuterHtmltextNode.InnerHtml 在上述方法之后将等于"text" .

例如 CreateHtmlTextNode("title", "blabla") 将生成: textNode.OuterHtml = "blabla" 而不是 <Title>blabla</Title>

有没有更好的方法来创建 HtmlTextNode

2 回答

  • 16

    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() . 这可确保正确编码特殊字符 .

  • 13

    以下行创建带有内容的外部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;
    

    希望能帮助到你 .

相关问题