無法使用Html-Agility-Pack設置InnerText

html-agility-pack

給定一個HTML文檔,我想識別文檔中的所有數字,並在數字周圍添加自定義標記。現在,我使用以下內容:

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

一旦我獲得了NumbersColl,我就可以遍歷每個Match並獲得索引。但是,我無法更改InnerText,因為它是只讀的。我需要的是,如果match.Value = 100且match.Index = 25,我想用<span isIdentified='true'> 25 </span>替換25

任何有關這方面的幫助將不勝感激。目前,由於我無法修改內部文本,我必須修改InnerHtml,但某些元素可能在其innerHtml中有25個。不應該觸及這一點。但是如何識別該數字是否在html標記內,即<table border ='1'>在標記中有1。

一般承認的答案

這是我為解決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));
            }
        }

在您的情況下,我相信您需要創建一個新的Element節點,將文本包裝到HtmlElement中,然後將其用作Text節點的替代。

或者甚至更好,看看你是否可以做類似這裡發布的答案: 使用HTML Agility Pack替換HTML div InnerText標籤


熱門答案

在這種情況下,創建textnode不應該做什麼:

myParentNode.AppendChild(D.CreateTextNode("<script>alert('a');</script>"));
Console.Write(myParentNode.InnerHtml);

結果應該是&lt; script ....

但它是一個工作腳本任務,即使我將其添加為“TEXT”而不是html。這會給我帶來一些安全問題,因為文本將是來自匿名用戶的輸入。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因