请帮我解决这个问题:(, 我正在使用C#的BrowserControl,我有一个像这样的html文档文件:
<html>
<title>
news
</title>
<body>
<br>
<br/>
<ul>
<li>Coffee</li>
<li>Tea
<ul>
<li>Black tea</li>
<li>Green tea</li>
</ul>
</li><li>Milk</li>
<li>Milk2</li>
</ul>
</body>
</html>
当我的鼠标点击<li>Black tea</li>
时,我怎么能得到这个标签的xPath?通过使用C#的BrowserControl,我只需获得innerHTML或OuterHTML或鼠标当前位置的文本。
答案 0 :(得分:1)
您无法使用您拥有的代码以编程方式获取此标记的XPath。实际上你必须自己构建XPath。但是,如果您使用HTML Agility Pack。
,这应该是微不足道的HTML Agility包允许您加载HTML文档(通常不是格式良好的XML),就好像它是正确形成的XML并在其上使用XPath查询一样。然后你可以做的是在HTML Agility Pack中加载文档,以编程方式搜索节点(例如,使用XPath搜索包含某个字符串的元素),然后当你从搜索中获得节点时,你可以构建一个通过走过每个父母的XPath。
总而言之:
鼠标单击时读取节点,给出 -
<li>Black Tea</li>
解析内容和节点名称 - 给出
Contents = Black Tea, Name = li
构建XPath查询:
//Name[contains(., Contents)]
(在这种情况下,// li(。,'Black Tea'))
遍历每个父项,构建一个xpath查询,给出 - ul / li,然后是li / ul / li,然后是ul / li / ul / li,然后是body / ul / li / ul / li,最后 -
html/body/ul/li/ul/li
所以关键是通过HTML Agility Pack以可遍历的方式获取文档,创建一个通用查询来获取节点,然后从节点构建完整的查询。
这有帮助吗?