XSLT 3.0 原生支持 JSON 处理,通过 XPath 3.1 函数直接读取、解析、遍历和生成 JSON,无需转为 XML;核心函数包括 json-doc()、?key 访问、?* 遍历,支持六种原生类型;json-to-xml() 仅在需模板匹配时作为可选桥梁;输出 JSON 需 method="text" 或 serialize()。

XSLT 3.0 原生支持 JSON 处理,不是靠外部插件或预处理,而是通过 XPath 3.1 定义的一套标准函数和数据模型实现的。核心在于:它把 JSON 当作一等公民纳入 XML 处理流程,允许直接读取、解析、遍历甚至生成 JSON 数据,而无需先手动转成 XML 再操作。
JSON 直接加载与解析
使用 json-doc() 函数可直接从 URL 或文件加载 JSON,并返回一个 XDM(XPath Data Model)结构——通常是 map 或 array 类型,而不是 XML 节点。这避免了“先转 XML 再处理”的冗余步骤。
- 例如:
json-doc('https://api.example/data.json')返回一个 map,可用?key查找字段 - 数组用
?*遍历,比如$data?example?items?*取 items 数组所有项 - 支持 null、boolean、number、string、map、array 六种原生类型,映射关系严格遵循 W3C 规范
json-to-xml() 是桥梁,不是必需步骤
当需要沿用传统 XSLT 模板匹配(如 )时,才用 json-to-xml() 把 JSON 转成特定格式的 XML 树。它生成的 XML 有固定命名空间 http://www.w3.org/2005/xpath-functions,根是 或 ,子元素带 key 属性。
- 转换后可用
这类写法,但灵活性不如直接操作 map/array - 数字精度可能丢失(双精度限制),如需 BigDecimal 级精度,得配合 Java 自定义函数
- 特殊字符自动转义,比如
" 变成zuojiankuohaophpcn,符合 XML 安全要求
输出 JSON 用 text 方法 + 序列化逻辑
XSLT 本身不支持 method="json",所以输出 JSON 必须设 output method="text",再手动拼接字符串或调用 xml-to-json()(仅限 Saxon PE/EE 支持)。
- 常见做法:用
(Saxon 10+) - 若用基础版处理器,需自己构造 JSON 字符串,比如
"{"name":"" || $name || ""}" - 注意:xml-to-json() 要求输入 XML 符合 map/array 结构,否则报错
基本上就这些。XSLT 3.0 的 JSON 支持本质是让 JSON 和 XML 在同一个处理管道里流动,不是替代关系,而是互补协同。










