XPath + Firebug + XML / HTML + HTML AgilityPack C#

时间:2009-12-11 22:40:08

标签: c# xpath

使用Firebug或某些小书签时:

javascript:(function(){var a=document.createElement("script");a.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js");if(typeof jQuery=="undefined"){document.getElementsByTagName("head")[0].appendChild(a)}(function(){if(typeof jQuery=="undefined"){setTimeout(arguments.callee,100)}else{jQuery("*").one("click",function(d){jQuery(this)[0].scrollIntoView();for(var e="",c=jQuery(this)[0];c&&c.nodeType==1;c=c.parentNode){var b=jQuery(c.parentNode).children(c.tagName).index(c)+1;b>1?(b="["+b+"]"):(b="");e="/"+c.tagName.toLowerCase()+b+e}window.location.hash="#xpath:"+e;prompt('Twoje wyrazenie:',e);d.preventDefault();d.stopPropagation();jQuery("*").unbind("click",arguments.callee)})}})()})();

我收到了HTML的XPath。为了通过HTML Agility Pack或Sgml解析HTML,我需要将其转换为XHTML(XML)。 但问题是(我认为)XHTML的XPath与HTML的XPath不同。 这就是为什么Firebug的“XPath复制”功能在与

一起使用时不起作用的原因
HtmlNode valueNode = doc.DocumentNode.SelectSingleNode(Firebugs_XPath);

例如,firebug / bookmarklet给出(如果我删除tbody则无效):

/html/body/div[2]/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]/form/table/tbody/tr[2]/td/div/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]/u

正确的代码是(给予或接受):

/html/body/div/table/tr[1]/td[2]/table/tr[1]//td[2]/table[2]/tr[1]//td[2]/table/tr/tr/td[2]/u

我的问题是 - 如何修复该行为,以使firebugXpath-> HtmlAgilityPack工作。 并且 - 这是可能的,使用带有内置C#WebBrowser组件的书签。

我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

Firebug对您的标记的表示可能与实际的XHTML不同,因为它试图规范化标记,这就是生成XPath查询而不是实际的底层XHTML。我不确定是否可以改变这种行为,你可能只需要手动调整XPath。

答案 1 :(得分:0)

我在尝试使用firebug和chrome以及ie开发工具获取正确的xpath时遇到了同样的问题,因此我使用HTML agility pack编写了一个应用程序来查找xpath。

http://letschat.info/?p=23