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
を作成するより良い方法はありますか?
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()
を呼び出してください。これにより、特殊文字が適切にエンコードされます。
次の行は、コンテンツを含む外部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;
それが役に立てば幸い。