web-dev-qa-db-ja.com

Htmlagilitypack:htmlテキストノードを作成します

HtmlAgilityPackで、カスタムInnerTextを持つHtmlTextNode(HtmlNodeから継承)であるHtmlNodeを作成したいと思います。

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

問題は、_textNode.OuterHtml_と_textNode.InnerHtml_が上記の方法の後の「テキスト」と等しくなることです。

例えばCreateHtmlTextNode("title", "blabla")は次を生成します:_textNode.OuterHtml = "blabla"_の代わりに_<Title>blabla</Title>_

HtmlTextNodeを作成するより良い方法はありますか?

17
Nizar Blond

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()を呼び出してください。これにより、特殊文字が適切にエンコードされます。

14
jessehouwing

次の行は、コンテンツを含む外部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
csteinmueller