使用通配符缩短XPATH

时间:2014-08-19 09:02:33

标签: xpath wildcard

我目前正试图弄清楚如何缩短我的超长xpath。

//div[@class='m_set_part'][1]/div/div[2]/div[@class='row']/div[@class='col details detail-head']/div[@class='detail-body']/div[2]/div/div[@class='size']/div/div[@class='m_product_finder_size']/ul/li[1]/span[@class='size-btn']/a

这是我现在所拥有的,而且时间太长,问题是我需要第一个节点来区分产品。有没有办法缩短它像

//div[@class='m_set_part']/*/span[@class='size-btn']/a

或者我是否必须通过所有子节点才能到达最后的节点?

Link

我想为每个产品找到尺寸按钮。我想,区分它们的唯一方法是通过向m_set_part节点添加[1]或[2]。

2 个答案:

答案 0 :(得分:2)

你基本上是正确的。如评论中所述,您可以使用//来选择后代或自身节点。因此,这将为您提供所有大小的链接:

//span[@class='size-btn']/a

如您所知,您可以使用位置谓词选择特定产品。但是,如果您愿意,也可以使用其他细节,例如名字。这只是

//div[@class="m_set_part"][.//label="Vælg"]

给你Vælg产品。

现在将它们组合在一起,您可以使用

获取此特定产品的大小链接
//div[@class="m_set_part"][.//label="Vælg"]//span[@class='size-btn']/a

或使用psoitional谓词,它将是

//div[@class="m_set_part"][1]//span[@class='size-btn']/a

另外,请确保使用正确的命名空间,因为这是一个实际的XHTML文档。另一件事是你可能更喜欢使用contains(@class, 'm_set_part')而不是@class="m_set_part"之类的东西,因为即使向这个元素添加新的CSS类,查询仍然可以工作。

答案 1 :(得分:0)

回答你的问题:不,你不必经历所有节点。

您可以使用//后代或自我选择器来跳过'表达式的前一部分和下一部分之间的零个或多个节点。所以//div[@class='m_set_part']//span[@class='size-btn']/a可能会给你你想要的东西。另一方面,*匹配任何节点,但恰好是一个节点。那么

//div[@class='m_set_part'][1]/*/*[2]/*[@class='row']/*[@class='col details detail-head']/*[@class='detail-body']/*[2]/*/*[@class='size']/*/*[@class='m_product_finder_size']/*/*[1]/*[@class='size-btn']/a

是缩短原始表达的另一种方法。它是否仍然仅返回感兴趣的节点或更多节点完全取决于您应用表达式的文档。