-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(因为 Value 只是一个 getter)时,它会抛出一个错误,提示“不支持指定的方法。”。
我真的不知道为什么会这样。
我没有找到任何其他方法来更改文本。

这是我正在运行的代码,用于在 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 回答