You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含空格的JSON字段编写XPath?咨询XPath 4.0使用及依赖

带空格JSON字段的XPath写法及XPath 4.0使用说明

先解决XPath 3.1里的可行方案

你之前试的?1?email id不生效,是因为XPath 3.1里带空格的JSON键不能直接裸写,得把键名用字符串字面量包起来再用括号括住。正确写法是:

$json?1?('email id')

或者简化成:

$json?1('email id')

这样就能正常取出"email id"字段的值了,不用急着升级到4.0。

如何使用XPath 4.0及所需依赖

XPath 4.0确实支持?1?'email id'这种更直观的写法,但目前支持它的处理器不多,主流的是Saxon 12及以上版本(推荐用最新的13.x版本,支持更完善)。

依赖配置(以Java/Maven为例)

如果是Java项目,直接在pom.xml里添加Saxon-HE的依赖:

<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>13.1</version>
</dependency>

Gradle项目的依赖配置:

implementation 'net.sf.saxon:Saxon-HE:13.1'

简单使用示例(Java)

下面是完整示例代码,用来解析JSON并执行XPath 4.0表达式:

import net.sf.saxon.s9api.*;
import java.io.StringReader;

public class XPath4JsonDemo {
    public static void main(String[] args) throws SaxonApiException {
        // 示例JSON数据
        String jsonData = "[{\"name\":\"Ram\", \"email id\":\"ram@gmail.com\", \"age\":23},{\"name\":\"Shyam\", \"email id\":\"shyam23@gmail.com\", \"age\":28}]";

        // 初始化Saxon处理器
        Processor saxonProcessor = new Processor(false);
        XPathCompiler xpathCompiler = saxonProcessor.newXPathCompiler();
        
        // 声明使用XPath 4.0
        xpathCompiler.setLanguageVersion("4.0");
        // 启用JSON处理命名空间
        xpathCompiler.declareNamespace("json", "http://saxon.sf.net/json");

        // 将JSON解析为XPath可处理的序列
        XdmNode jsonNode = saxonProcessor.newJsonParser().parse(new StringReader(jsonData));
        XdmValue jsonSequence = XPathEvaluator.convertJsonToXPath(jsonNode, saxonProcessor);

        // 编译XPath 4.0表达式
        XPathExecutable executable = xpathCompiler.compile("?1?'email id'");
        XPathSelector selector = executable.load();
        selector.setContextItem(jsonSequence);

        // 获取并打印结果
        XdmItem result = selector.evaluateSingle();
        System.out.println(result.getStringValue()); // 输出 ram@gmail.com
    }
}

注意事项

  • XPath 4.0目前还是W3C候选推荐版本,不同处理器支持程度有差异,优先选择最新版Saxon。
  • 非Java环境(比如Python)暂时没有原生支持XPath 4.0的成熟库,可通过调用Saxon的CLI工具,或用Jython间接使用。

内容的提问来源于stack exchange,提问作者Sujit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:55:07