Html 如何在不使用非动态位置的情况下选择动态受限的节点范围?
这对于第一组(Jeff和Mary)非常有效,但一旦应用到代码下面的范围,它就会崩溃,并开始选择超出需要的内容 例如:Html 如何在不使用非动态位置的情况下选择动态受限的节点范围?,html,xml,selenium,xpath,Html,Xml,Selenium,Xpath,这对于第一组(Jeff和Mary)非常有效,但一旦应用到代码下面的范围,它就会崩溃,并开始选择超出需要的内容 例如: //li[following-sibling::li/strong[contains(text() , "Jeff")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)] //li[following-sibling::li/strong[contains(text() , "Rich")]]/follow
//li[following-sibling::li/strong[contains(text() , "Jeff")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
//li[following-sibling::li/strong[contains(text() , "Rich")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
这会选择“Rich”、“Alex”、“Bob”……但也会选择“Jeff”和“Mary”
例如:
//li[following-sibling::li/strong[contains(text() , "Jeff")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
//li[following-sibling::li/strong[contains(text() , "Rich")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
这选择了“戴夫”和“约瑟夫”,但也选择了“里奇”、“亚历克斯”、“鲍勃”、“杰夫”和“玛丽”
我希望能够插入一个名称,并使用一个表达式来选择包含该名称的列表项的所有同级列表项,但在到达包含标题的列表项时也会停止选择。问题似乎在于带有标题的列表项在任何方面都不是唯一的。这是XPath无法做到的吗?您的示例HTML不是格式良好的XML,即许多元素缺少结束标记。考虑下面的格式很好的XML示例:
//li[following-sibling::li/strong[contains(text() , "Dave")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
XPath首先查找直接后跟包含名称的元素的
。然后从找到的
中,返回以下所有同级元素中的文本节点
但是,如果您有另一组未包装在
中的名称,XPath将失败(目前您只有一组这样的名称,这很好)。例如,您可以添加另一个对前面的
计数的逻辑来处理这种情况。这将使XPath相当复杂,因此除非实际需要,否则我不会实现它。您的示例HTML不是格式良好的XML,即许多元素缺少结束标记。考虑下面的格式很好的XML示例:
//li[following-sibling::li/strong[contains(text() , "Dave")]]/following-sibling::li[th][1]/preceding-sibling::li[not(th)]
XPath首先查找直接后跟包含名称的元素的
。然后从找到的
中,返回以下所有同级元素中的文本节点
但是,如果您有另一组未包装在
中的名称,XPath将失败(目前您只有一组这样的名称,这很好)。例如,您可以添加另一个对前面的
计数的逻辑来处理这种情况。这将使XPath变得相当复杂,因此除非实际需要,否则我不会实现它。似乎您从未显示您真正想要从示例中选择的内容,而且您的口头描述太不清楚,无法使用。@kjhughes我相信OP需要一个列表,列表中的名字是松散连续的名称。所以应该是“杰夫”、“玛丽”加上“杰夫”里奇、亚历克斯、鲍勃被赋予“里奇”;“Dave”、“Joseph”给了“Dave”。我猜
标签应该放在哪里可能是非常错误的…@GeoffreyCK请澄清。Thanks@har07当前位置如果没有其他原因让你对这个问题有点理解的话,我会退后一步,对你勇敢的解释表示赞赏,并对你的答案投赞成票似乎您从未展示过您想从示例中选择的内容,而且您的口头描述太不清楚,无法使用。@kjhughes我相信OP想要的是列表中第一个名字的松散连续的名字列表。所以应该是“杰夫”、“玛丽”加上“杰夫”里奇、亚历克斯、鲍勃被赋予“里奇”;“Dave”、“Joseph”给了“Dave”。我猜
标签应该放在哪里可能是非常错误的…@GeoffreyCK请澄清。Thanks@har07当前位置如果没有其他原因让你对这个问题有点理解的话,我会退后一步,对你勇敢的解释表示赞赏,并对你的答案投赞成票