-1

たとえば、このマークアップがある場合:

<p>
    <br />
    TEXT TEXT TEXT KEYWORD
    <span>TEXT TEXT TEXT</span>
</p>

KEYWORD テキストをアンカー要素に置き換えて、次のようにするにはどうすればよいですか。

<p>
    <br />
    TEXT TEXT TEXT <a href="www.url.com">KEYWORD</a>
    <span>TEXT TEXT TEXT</span>
</p>

HtmlNodeNavigator Value 属性を使用してみましたが、現在のナビゲーション要素とその兄弟と子のテキスト文字 (子要素が含まれているすべての InnerText ではありません) しかないようです。

しかし、SetValue を使用しようとすると (値はゲッターにすぎないため)、「指定されたメソッドはサポートされていません」というエラーがスローされます。
なぜこれが起こるのかよくわかりません。
テキストを変更する他の方法は見つかりませんでした。

これは、HTML マークアップでキーワード テキストを検索し、リンクとして設定するために実行しているコードです。
まだ完了していないことはわかっていますが、古いテキストの代わりに新しいテキストを置き換えて取得する部分にこだわっています。再帰的な方法であることに注意してください。

private  static void FindKeyword(string keyword, string url, HtmlAgilityPack.HtmlNodeNavigator nav)
    {
        while (!nav.IsEmptyElement && nav.InnerXml.Contains(keyword))
        {
            if (nav.Value.Contains(keyword) && nav.Name != "a")
            {
                string newStr = nav.Value.Replace(keyword, "<a href=\"" + url + "\">" + keyword + "</a>");

                nav.SetValue(newStr);//exception "Specified method is not supported"
            }

            if (nav.HasChildren)
            {
                nav.MoveToFirstChild();
                FindKeyword(keyword, url, nav); 
            }

            nav.MoveToNext();
        }
    }

誰かがこれを理解するのを手伝ってくれますか?
ありがとう

4

1 に答える 1

-1

Replaceを使用しないのはなぜですか?

string input = "<p><br />TEXT TEXT TEXT KEYWORD<span>TEXT TEXT TEXT</span></p>";
input = input.Replace("KEYWORD", "<a href=\"www.url.com">KEYWORD</a>")

複数のキーワードがある場合

string input = "<p><br />TEXT TEXT TEXT KEYWORD<span>TEXT TEXT TEXT</span></p>";
string[] keywords = { "KEYWORD1", "KEYWORD2" };
for(int i=0; i<keywords.Length; i++)
    input.replace(keyword[i],"<a href=\"www.url.com\">" + keyword[i] + "</a");

別のリンクを追加したい場合

string input = "<p><br />TEXT TEXT TEXT KEYWORD<span>TEXT TEXT TEXT</span></p>";
string[,] keyurls = { {"KEYWORD1","URL1"}, {"KEYWORD2","URL2"} };
for(int i=0; i<keyurls.GetLength(0); i++)
    input.replace(keyurls[i,0],"<a href=\"" + keyurls[i,1] + "\">" + keyurls[i,0] + "</a");
于 2013-02-02T01:03:21.717 に答える