Powershell中的HtmlAgilityPack通配符搜索

时间:2017-01-09 15:54:59

标签: html powershell dom xpath html-agility-pack

我怎样才能缩短以下内容?

$contactsBlock是一个HTMLAgilityPack节点,XPath:/html[1]/body[1]/div[3]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div[3]/div[5]/div[1]/div[2]

$contactsBlock.SelectSingleNode(".//table").SelectSingleNode(".//table")

所需XPath中的结果:/html[1]/body[1]/div[3]/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]/div[3]/div[5]/div[1]/div[2]/table[1]/tr[2]/td[1]/div[1]/div[2]/table[1]

第二个表嵌套在第一个表中,我想将上面的SelectSingleNode缩短两次到这样的

$contactsBlock.SelectSingleNode(".//table/*/table")并跳过中间人。

有没有办法像这样的外卡?

1 个答案:

答案 0 :(得分:1)

XPath表达式.//table//table应匹配当前节点下其他表中嵌套的所有表。双正斜杠匹配任意长度的路径。

.//table/*/table不太可能给你一个匹配,因为星号通配符匹配一个节点(即一个层次结构),所以嵌套表必须是第一个表的孙子节点:

<table>
  <tr>
    <table>...</table>   <!-- nested table would have to go here -->
  </tr>
</table>

这很不寻常。与您的问题中的XPath表达式建议的结构不匹配。