Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在不使用非动态位置的情况下选择动态受限的节点范围?_Html_Xml_Selenium_Xpath - Fatal编程技术网

Html 如何在不使用非动态位置的情况下选择动态受限的节点范围?

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

这对于第一组(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)]
这会选择“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当前位置如果没有其他原因让你对这个问题有点理解的话,我会退后一步,对你勇敢的解释表示赞赏,并对你的答案投赞成票