Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.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 XPath选择div,且单个子级忽略空格?_Html_Dom_Xpath - Fatal编程技术网

Html XPath选择div,且单个子级忽略空格?

Html XPath选择div,且单个子级忽略空格?,html,dom,xpath,Html,Dom,Xpath,我希望找到不需要的嵌套div,并通过查找只有一个元素的div(忽略空白节点)来清理它们 请尝试一下: //div[not(*[2]) and div and not(text()[normalize-space()])] 这应选择具有单个子元素且没有非空白子文本节点的divs。使用此简短有效的表达式: //div[*[1][self::div]][not(*[2]|text()[normalize-space()])] 在什么方面它部分地不起作用?似乎只需要一个小的改变,就可以只选择子div

我希望找到不需要的嵌套div,并通过查找只有一个元素的div(忽略空白节点)来清理它们


请尝试一下:

//div[not(*[2]) and div and not(text()[normalize-space()])]

这应选择具有单个子元素且没有非空白子文本节点的
div
s。

使用此简短有效的表达式:

//div[*[1][self::div]][not(*[2]|text()[normalize-space()])]

在什么方面它部分地不起作用?似乎只需要一个小的改变,就可以只选择子div
//div[count(*)=1和child::div和not(text()[normalize-space()])]
非常好。需要注意的一点是,在本例中,在
div
之前不需要
子项::
。只需使用
//div[count(*)=1和div and not(text()[normalize-space()])]
将完全相同,因为子轴是默认轴。这意味着什么?如果第一个元素是div,而第二个元素不存在或是空元素?@Xeoncross,这表示第一个子元素必须是
div
,不应该有第二个子元素,也不应该有任何非纯空白的文本节点子元素。效率是子元素不被“计数,只与1比较”。想象一下,有许多具有数百个子元素的
div
s…
not(*[2]| text()[normalize-space()])
意味着没有第二个元素或第二个元素是空的(在删除空格后)@Xeoncross:实际上没有。它的意思是:没有第二个元素子元素,也没有任何包含任何非空格字符的文本节点子元素。
|
字符是XPath联合运算符。
//div[not(*[2]) and div and not(text()[normalize-space()])]
//div[*[1][self::div]][not(*[2]|text()[normalize-space()])]