如何使用XPath选择仅包含em子元素的p元素?
仅包含em子元素的p元素XPath选择方案
需求回顾
要精准选中仅包含em直接子元素的p标签——p标签首尾没有任何非空白文本,所有内容都被包裹在em标签内部。
正确的XPath表达式(XPath 1.0兼容,适用性最广)
//p[child::em and not(text()[normalize-space()])]
如果需要更严谨地限制p只有一个子元素且为em,可以用:
//p[count(child::*) = 1 and child::em and not(normalize-space(text()))]
表达式解释
//p:遍历文档中所有p元素child::em:筛选出直接包含em子元素的pnot(text()[normalize-space()]):排除带有非空白文本节点的p——即p标签里除了em和空白字符外,没有其他实际内容count(child::*) = 1(可选):进一步确保p只有一个子元素,避免匹配到包含多个em或em加其他元素的p
为什么之前的表达式无效
//p/em:选中的是em元素而非p元素,且只要p里有em就会被匹配,不管有没有其他文本//em/parent::p:只要em的父节点是p就选中,完全不检查p内的其他内容//p[starts-with(.,'./em')]:逻辑错误,.代表p的文本内容而非节点路径,这个表达式无法匹配目标元素
内容的提问来源于stack exchange,提问作者user15739925
相关产品推荐
相关产品推荐

