集合中的 Xpath return 标记位置(包含文本)
Xpath return tag position (which contains text) in a set
我想 return 一组标签中包含选定文本的第一个标签的位置编号。
我想设置一个有 4 列的 google sheet :
2:类别页面上的产品数量:
=IMPORTXML($B4;"count(//p[@data-test-id='productTitle'])")
3 : 标题中包含“Legrand”或“Céliane with Netatmo”的产品数量:
=IMPORTXML($B4;"count(//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])")
上面的公式很好。我在第四个上遇到了困难:
4 : 标题中包含“Legrand”或“Céliane with Netatmo”的第一个产品的位置。
例如,第 2 列 returns 24(产品)和第 3 列 returns 12(产品)。
如果第一个产品是带有“Legrand”或“Céliane with Netatmo”的产品,我希望第 4 列为 return 1。如果它位于第 4 个位置,我希望它为 return 4.
我试过了
=IMPORTXML($B4;"//div//p[@data-test-id='productTitle'][.='Legrand']/preceding-subling::*)+1")
但似乎我没有“//div//p”的正确顺序。我打赌它与子元素有关,在“/”之前,我一定没有正确选择标签。
他们真的把那个页面的数据藏得很深....
尝试(在此示例中使用“Céliane”;显然您可以进一步修改它):
=IMPORTXML($B4,"count((//li[@class='b9bdc658'][.//p[@data-test-id='productTitle'][contains(.,'Céliane')]])[1]/preceding-sibling::*)+1")
具有以下 XPath 的另一个选项(我们使用 ()
[]
和 preceding
轴):
=IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1")
输出:
为了安全起见(如果页面上没有罗格朗产品),E4中的公式应该是:
=IF(D4=0;"NA";IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1"))
Castorama pour ré-u-ssir !
我想 return 一组标签中包含选定文本的第一个标签的位置编号。
我想设置一个有 4 列的 google sheet :
2:类别页面上的产品数量:
=IMPORTXML($B4;"count(//p[@data-test-id='productTitle'])")
3 : 标题中包含“Legrand”或“Céliane with Netatmo”的产品数量:
=IMPORTXML($B4;"count(//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])")
上面的公式很好。我在第四个上遇到了困难:
4 : 标题中包含“Legrand”或“Céliane with Netatmo”的第一个产品的位置。
例如,第 2 列 returns 24(产品)和第 3 列 returns 12(产品)。 如果第一个产品是带有“Legrand”或“Céliane with Netatmo”的产品,我希望第 4 列为 return 1。如果它位于第 4 个位置,我希望它为 return 4.
我试过了
=IMPORTXML($B4;"//div//p[@data-test-id='productTitle'][.='Legrand']/preceding-subling::*)+1")
但似乎我没有“//div//p”的正确顺序。我打赌它与子元素有关,在“/”之前,我一定没有正确选择标签。
他们真的把那个页面的数据藏得很深....
尝试(在此示例中使用“Céliane”;显然您可以进一步修改它):
=IMPORTXML($B4,"count((//li[@class='b9bdc658'][.//p[@data-test-id='productTitle'][contains(.,'Céliane')]])[1]/preceding-sibling::*)+1")
具有以下 XPath 的另一个选项(我们使用 ()
[]
和 preceding
轴):
=IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1")
输出:
为了安全起见(如果页面上没有罗格朗产品),E4中的公式应该是:
=IF(D4=0;"NA";IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1"))
Castorama pour ré-u-ssir !