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

nik*_*hil 3 html-agility-pack

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

HtmlNodeCollection bodyNode = htmlDoc.DocumentNode.SelectNodes("//body");
MatchCollection numbersColl = Regex.Matches(htmlNode.InnerText, <some regex>);
Run Code Online (Sandbox Code Playgroud)

一旦我获得了numbersColl,我就可以遍历每个Match并获得索引.但是,我无法更改InnerText,因为它是只读的.我需要的是,如果match.Value = 100并且match.Index = 25,我想用25替换 <span isIdentified='true'> 25 </span>

任何有关这方面的帮助将不胜感激.目前,由于我无法修改内部文本,我必须修改InnerHtml,但某些元素可能在其innerHtml中有25个.不应该触及这一点.但是如何识别该数字是否在html标记内,即<table border ='1'>在标记中有1.

pym*_*oza 5

这是我为解决Text节点的InnerText属性的只读属性限制所做的工作,只需选择Text节点的Parent节点,并记下Parent节点的子节点集合中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));
            }
        }
Run Code Online (Sandbox Code Playgroud)

在您的情况下,我相信您需要创建一个新的Element节点,将文本包装到HtmlElement中,然后将其用作Text节点的替代.

或者甚至更好,看看你是否可以做类似这里发布的答案: 使用HTML Agility Pack替换HTML div InnerText标签