2017-01-09 158 views
1

如何缩短以下内容?Powershell中的HtmlAgilityPack通配符搜索

$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

试试'.// table // table'。这应该匹配嵌套在其他表中的所有表。 –

+0

是的。我会做出这个答案。谢谢。 – STWilson

回答

1

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

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

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

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