我正在用AngleSharp解析一个文档。我有一个文本节点(NodeName:"# text "),我想在其中插入一些HTML。我当然可以将NodeValue重置为我想要的任何东西,但是它仍然是一个文本节点,所以所有的括号都是转义的。
如何获取文本节点的字符串值,向其中注入一些HTML,然后有一个解析的DOM表示,即HTML取代原始文本节点?
发布于 2015-10-11 23:02:49
我猜您想要的是用多个节点替换单个文本节点。
例如<div>foo</div>
,也就是,
+ root
+ textnode
变成了
+ root
+ textnode (1)
+ element
+ textnode (2)
这可能是<div>f<b>o</b>o</div>
。我能想到的最简单的方法就是替换节点。
var source = @"<div>foo</div>";
var parser = new HtmlParser();
var document = parser.Parse(source);
var div = document.QuerySelector("div");
div.InnerHtml = div.InnerHtml.Replace("foo", "f<b>o</b>o");
现在你可以说,仅仅替换文本可能不是你想要的。您可能已经有要插入的元素。因此,一种更好(但更复杂)的方法是拆分文本节点并插入其余内容。
var source = @"<div>foo</div>";
var parser = new HtmlParser();
var document = parser.Parse(source);
var div = document.QuerySelector("div");
var text = div.TextContent;
div.RemoveChild(div.FirstChild); // assuming there is only one child
var bold = document.CreateElement("b");
bold.TextContent = text.Substring(1, 1); //o
div.Append(
document.CreateTextNode(text.Substring(0, 1)), //f
bold,
document.CreateTextNode(text.Substring(2, 1)));//o
根据您的用例,可能有一个更简单的解决方案。
https://stackoverflow.com/questions/33047239
复制相似问题