如何使用C#替换HTML标签内部文本内容!

时间:2010-09-26 18:58:29

标签: c# html regex dom mshtml

现在我正在开发一个Internet Explorer,它应该以纯文本格式扫描HTML文档中的URL,然后“链接”它们。

我可以访问网站DOM,并且有想法遍历所有DOM节点并使用RegEx搜索“链接”,用HTML代码替换这些文本,但是,当更改“InnerText”属性时IHTMLElement对象,它的所有子节点都丢失了,这严重影响了网站。

以下是一些代码:

//This method is called when IE has finished loading a page
void _webBrowser2Events_DocumentComplete(object pDisp, ref object URL)
{
    if (pDisp == _webBrowser2)
    {
        HTMLDocument pageContent = _webBrowser2.Document;
        IHTMLElement bodyHtmlElmnt = pageContent.body;
        fixElement(bodyHtmlElmnt);
    }   
}

这是fixElement-method:

void fixElement(IHTMLElement node)
{
    if (node.innerText!=null && ((IHTMLElementCollection)node.children).length==0)
    {
        node.innerText= node.innerText.Replace("testString", "replaceWithThis");
    }

    foreach (IHTMLElement child in (node.children as mshtml.IHTMLElementCollection))
    {
        fixElement(child);
    }
}

这样可行,但仅限于没有任何子节点的节点。

任何人都可以帮我解决这个问题,我将非常感激!

此致

//亨利克

4 个答案:

答案 0 :(得分:2)

为什么你不想像这样使用javscript http://userscripts.org/scripts/review/1352 然后使用您的c#代码执行此javascript。 只是

webBrowser1.Navigate(new Uri("javascript:<YOURSCRIPT>"));

关于这一点的好处是你可以做很多事情而不需要重新发明它们,网址链接是由javascript人员发明的,所以只需使用该代码..

如果有任何脚本(比如这个脚本很大,那么你可以使用这个脚本从* .js文件中插入)

javascript:(function(){document.body.appendChild(document.createElement('script')).src='<YOUR SCRIPT URL>';})();

替换为您在互联网上托管的javascript或localy(如果本地使用file:// url格式)

答案 1 :(得分:2)

嗯,这对我来说很明显(但我没有测试过),你应该删除

((IHTMLElementCollection)node.children).length==0

来自方法fixElement的第一行:

void fixElement(IHTMLElement node)
{
    if (node.innerText!=null) // && ((IHTMLElementCollection)node.children).length==0)
    {
         node.innerText= node.innerText.Replace("testString", "replaceWithThis");
    }
    ...
}

答案 2 :(得分:1)

您可以做的是将子节点存储在temp IHTMLElement中并更改所需的元素,然后您可以将节点重新注入更改的元素中。

我希望它有所帮助。

答案 3 :(得分:1)

可能你应该使用innerText而不是innerHTML属性,然后你就可以删除这个条件:((IHTMLElementCollection)node.children)。length == 0