首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Html-Agility-Pack设置InnerText

无法使用Html-Agility-Pack设置InnerText
EN

Stack Overflow用户
提问于 2012-07-19 22:52:38
回答 2查看 3.5K关注 0票数 3

给定一个HTML文档,我希望标识文档中的所有数字,并在数字周围添加自定义标记。现在,我使用以下内容:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-31 16:59:57

下面是我为解决 Text 节点的InnerText属性的只读属性限制所做的工作,只需选择Text节点的节点,并注意该Text节点在父节点的子节点集合中的索引。那就做个ReplaceChild(...)吧。

代码语言:javascript
复制
       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

票数 6
EN

Stack Overflow用户

发布于 2017-02-24 00:23:46

在这种情况下,创建textnode并不是它应该做的事情:

代码语言:javascript
复制
myParentNode.AppendChild(D.CreateTextNode("<script>alert('a');</script>"));
Console.Write(myParentNode.InnerHtml);

结果应该类似于

但这是一个工作脚本任务,即使我将其添加为"TEXT“而不是html。这给我带来了某种安全问题,因为文本将是来自匿名用户的输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11563491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档