如何用XPath识别上标后紧跟下标及仅上标的场景?
用XPath区分两种标签场景
针对你需要区分的两种场景,完全可以用XPath实现精准识别,以下是对应两种场景的表达式及说明:
场景1:后不紧跟(仅独立出现的)
要匹配这类,核心是判断它的第一个兄弟节点不是元素,对应的XPath:
//sup[not(following-sibling::*[1][self::sub])]
逻辑说明
following-sibling::*[1]取的第一个兄弟元素,self::sub判断该元素是否是,加上not()就表示排除掉那些后面紧跟的。比如你示例里的第一个,它的第一个兄弟是文本节点aaa,符合这个条件会被匹配。
如果需要更严格(确保没有任何文本/注释等节点插在和之间),可以用node()代替*,匹配所有类型的节点:
//sup[not(following-sibling::node()[1][self::sub])]
场景2:后立即紧跟
要匹配这类,直接判断它的**第一个兄弟节点就是**即可,XPath:
//sup[following-sibling::*[1][self::sub]]
同样,要精准匹配所有节点类型(确保没有任何文本/注释等节点插在中间),用:
//sup[following-sibling::node()[1][self::sub]]
示例里的第二个,它的第一个兄弟节点就是,会被这个表达式命中。
关于你之前的尝试
boolean(following-sibling::text())只能判断后面是否存在文本节点,但没法区分是否紧跟,而上面的表达式直接针对两种场景的核心差异,能精准实现你的需求。
内容的提问来源于stack exchange,提问作者srikrishnan
相关产品推荐
相关产品推荐

