Html XPath选择div,且单个子级忽略空格?
我希望找到不需要的嵌套div,并通过查找只有一个元素的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[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()])]