Innertext kann nicht mit dem Html-Agility-Pack festgelegt werden

html-agility-pack

Frage

Bei einem HTML-Dokument möchte ich alle Zahlen im Dokument identifizieren und benutzerdefinierte Tags um die Zahlen hinzufügen. Im Moment benutze ich folgendes:

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

Sobald ich die Nummern erhalten habe, kann ich jedes Match durchlaufen und den Index erhalten. Ich kann den InnerText jedoch nicht ändern, da er schreibgeschützt ist. Was ich brauche ist, dass, wenn match.Value = 100 und match.Index = 25, ich das 25 mit <span isIdentified='true'> 25 </span> ersetzen möchte

Jede Hilfe wird sehr geschätzt. Derzeit, da ich den inneren Text nicht ändern kann, muss ich InnerHtml ändern, aber ein Element könnte 25 in seinem inneren HTML haben. Das sollte nicht berührt werden. Aber wie identifiziere ich, ob die Zahl innerhalb eines HTML-Tags ist, dh <table border = '1'> hat 1 im Tag.

Akzeptierte Antwort

Hier ist , was ich um die schreibgeschützte Eigenschaft Begrenzung der Innertext Eigenschaft eines Textknoten, wählen Sie einfach den übergeordneten Knoten des Textknoten und beachten Sie den Index des Text - Knoten in den untergeordneten Knoten Sammlungen des übergeordneten Knoten arbeiten haben. Dann mach einfach ein 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));
            }
        }

In Ihrem Fall glaube ich, dass Sie einen neuen Elementknoten erstellen müssen, der den Text in ein HtmlElement umschließt und ihn dann nur als Ersatz für den Textknoten verwendet.

Oder noch besser, sehen Sie, ob Sie etwas wie die hier gepostete Antwort tun können: Ersetzen eines HTML div InnerText-Tags mit HTML Agility Pack


Beliebte Antwort

das Erstellen eines Textknotens macht nicht, was es in diesem Fall tun soll:

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

Das Ergebnis sollte etwas wie & lt; Skript sein ....

aber es ist eine funktionierende Skriptaufgabe, auch wenn ich sie als "TEXT" nicht als HTML hinzufüge. Dies verursacht ein Sicherheitsproblem für mich, da der Text eine Eingabe von einem anonymen Benutzer wäre.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum