如何用C#替换HTML标签内部的文本内容!
现在我正在处理一个Internet Explorer添加项,该添加项应该以纯文本格式扫描HTML文档的URL,然后“链接”它们。如何用C#替换HTML标签内部的文本内容!
我有权访问网站的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法:
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);
}
}
这个工作,但只适用于没有任何孩子节点。
任何人都可以请帮我解决这个问题,我会非常感激!
问候
//亨里克
为什么你不想使用javscript像这样 http://userscripts.org/scripts/review/1352 然后用你的c#代码执行这个javascript。 只是
webBrowser1.Navigate(new Uri("javascript:<YOURSCRIPT>"));
关于这个的好处是,你可以做很多事情,甚至没有重新发明它们,网址linkification早已回来的javascript人发明的,所以只使用该代码..
如果任何脚本(像这样的大,那么你可以从* .js文件使用这个脚本插入)
javascript:(function(){document.body.appendChild(document.createElement('script')).src='<YOUR SCRIPT URL>';})();
替换你的JavaScript托管因特网上或者localy(如果本地使用file:// URL格式)
你可以做的是存储在临时IHTMLElement子节点,并更改所需的元素,然后就可以再次注入节点到改变的元素。
我希望它有帮助。
也许你应该使用的innerText而不是innerHTML属性,然后你就可以删除此条件:((IHTMLElementCollection)node.children)。长度== 0
对不起,使用了错误的版本,现在已经修复!当使用innerText时,子节点被销毁! – nelshh 2010-09-26 19:16:58
好,似乎很明显,我(但我没有测试它),你应该从方法fixElement的第一行中删除
((IHTMLElementCollection)node.children).length==0
:
void fixElement(IHTMLElement node)
{
if (node.innerText!=null) // && ((IHTMLElementCollection)node.children).length==0)
{
node.innerText= node.innerText.Replace("testString", "replaceWithThis");
}
...
}
InnerText是“只读”,所以你不能这样做 – AlbatrossCafe 2016-07-19 19:09:24
听起来不错!尽管我已经在文档中查找遍地,但我似乎无法找到如何将我的子节点注入到元素中! – nelshh 2010-09-26 19:21:15