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の場合、その25を<span isIdentified='true'> 25 </span>

これに関するいかなる助力も非常に高く評価されます。現在、内部のテキストを変更することができないため、InnerHtmlを変更する必要がありますが、innerHtmlに25を持つ要素もあります。それは触れてはいけません。しかし、その数字がhtmlタグ内にあるかどうかを確認するにはどうすればいいのですか?つまり、<table border = '1'>はタグに1を持っています。

受け入れられた回答

ここでは、 テキストノードの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));
            }
        }

あなたの場合は、テキストをHtmlElementにラップし、それをTextノードの代わりに使用する新しいElementノードを作成する必要があると思います。

あるいは、あなたがここに投稿された答えのようなものを行うことができるかどうかを確認してください: HTML div InnerTextタグをHTML Agility Packを使用して置き換える


人気のある回答

この場合、テキストノードを作成しても何もしません。

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

結果は、<script ....>のようになります。

それはhtmlとしてではなく "TEXT"として追加しても、それは作業スクリプトタスクです。これは、テキストが匿名ユーザーからの入力になるため、私にはセキュリティの問題が発生します。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ