如何在HTML中查找标记的xPath

时间:2012-02-09 07:58:14

标签: c# html xpath xhtml

请帮我解决这个问题:(, 我正在使用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或鼠标当前位置的文本。

1 个答案:

答案 0 :(得分:1)

您无法使用您拥有的代码以编程方式获取此标记的XPath。实际上你必须自己构建XPath。但是,如果您使用HTML Agility Pack

,这应该是微不足道的

HTML Agility包允许您加载HTML文档(通常不是格式良好的XML),就好像它是正确形成的XML并在其上使用XPath查询一样。然后你可以做的是在HTML Agility Pack中加载文档,以编程方式搜索节点(例如,使用XPath搜索包含某个字符串的元素),然后当你从搜索中获得节点时,你可以构建一个通过走过每个父母的XPath。

总而言之:

  1. 鼠标单击时读取节点,给出 -

    <li>Black Tea</li>
    
  2. 解析内容和节点名称 - 给出

    Contents = Black Tea, Name = li
    
  3. 构建XPath查询:

    //Name[contains(., Contents)] 
    

    (在这种情况下,// li(。,'Black Tea'))

  4. 遍历每个父项,构建一个xpath查询,给出 - ul / li,然后是li / ul / li,然后是ul / li / ul / li,然后是body / ul / li / ul / li,最后 -

    html/body/ul/li/ul/li
    
  5. 所以关键是通过HTML Agility Pack以可遍历的方式获取文档,创建一个通用查询来获取节点,然后从节点构建完整的查询。

    这有帮助吗?