给定一个HTML文档,我希望标识文档中的所有数字,并在数字周围添加自定义标记。现在,我使用以下内容:
HtmlNodeCollection bodyNode = htmlDoc.DocumentNode.SelectNodes("//body");
MatchCollection numbersColl = Regex.Matches(htmlNode.InnerText, <some regex>);一旦我得到了numbersColl,我就可以遍历每个匹配并获得索引。但是,我不能更改InnerText,因为它是只读的。我需要的是,如果match.Value = 100且为match.Index=25,我想用<span isIdentified='true'> 25 </span>替换这25
在这方面的任何帮助都将非常感谢。目前,由于我不能修改内部文本,所以我必须修改innerHtml,但某些元素的InnerHtml中可能有25。那是不应该被碰的。但是我如何识别数字是否在html标记内,即< table border='1‘>在标记中有1。
发布于 2012-07-31 16:59:57
下面是我为解决 Text 节点的InnerText属性的只读属性限制所做的工作,只需选择Text节点的父节点,并注意该Text节点在父节点的子节点集合中的索引。那就做个ReplaceChild(...)吧。
private void WriteText(HtmlNode node, string text)
{
if (node.ChildNodes.Count > 0)
{
node.ReplaceChild(htmlDocument.CreateTextNode(text), node.ChildNodes.First());
}
else
{
node.AppendChild(htmlDocument.CreateTextNode(text));
}
}在您的示例中,我认为您需要创建一个新的元素节点来将文本包装到HtmlElement中,然后将其用作文本节点的替代。
或者更好的是,看看您是否可以做一些类似这里发布的答案:Replacing a HTML div InnerText tag using HTML Agility Pack
发布于 2017-02-24 00:23:46
在这种情况下,创建textnode并不是它应该做的事情:
myParentNode.AppendChild(D.CreateTextNode("<script>alert('a');</script>"));
Console.Write(myParentNode.InnerHtml);结果应该类似于
但这是一个工作脚本任务,即使我将其添加为"TEXT“而不是html。这给我带来了某种安全问题,因为文本将是来自匿名用户的输入。
https://stackoverflow.com/questions/11563491
复制相似问题