如何用XPath仅提取XML中<b>节点直接包含的6.89文本
问题说明
现有如下XML结构:
<?xml version="1.0" encoding="UTF-8"?> <a> <b>6.89<c>45</c></b> </a>
直接使用XPath表达式//b提取内容时,返回结果会同时包含<b>节点的直接文本和子节点<c>内的文本,不符合仅提取<b>下直接包含的6.89文本、排除子节点内容的需求。
解决方案
正确的XPath写法为:
//b/text()
写法说明
text()是XPath内置的节点类型匹配符,代表选中当前上下文下的直接文本子节点,不会递归读取子元素内部的内容,因此上述表达式只会返回<b>节点直属的6.89文本,不会带出<c>节点内的45。- 如果目标节点下存在多段直接文本(例如结构为
<b>第一段文本<c>子节点文本</c>第二段文本</b>),可以通过索引指定要提取的文本段,比如提取第一段直接文本的写法为//b/text()[1]。
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

