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

如何在XSLT中避免XML转JSON时的斜杠与双引号转义?

解决XSLT中xml-to-json()的序列化优化问题

要实现你期望的JSON输出(斜杠不转义、XML属性用单引号),可以借助Saxon的扩展序列化选项,结合xml-to-json()的参数配置来完成,具体方案如下:

1. 关键扩展选项说明

Saxon提供了两个关键的扩展参数来解决你的问题:

  • saxon:single-quotes: 设置为true()时,序列化XML属性值时会使用单引号代替双引号,避免JSON字符串中出现额外的转义双引号。
  • saxon:escape-slash: 设置为false()时,会禁止对JSON字符串中的斜杠(/)进行转义,保留原始的斜杠格式。

2. 完整XSLT实现

需要先声明Saxon的命名空间,然后将这两个选项加入到xml-to-json()的参数map中:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:saxon="http://saxon.sf.net/"
                version="3.0">
  <xsl:output method="text"/>
  
  <xsl:template match="/">
    <xsl:value-of select="xml-to-json(., 
      map{
        'indent': true(),
        'saxon:single-quotes': true(),
        'saxon:escape-slash': false()
      })"/>
  </xsl:template>
</xsl:stylesheet>

3. 输出结果验证

用上述XSLT处理你的输入XML后,会生成你期望的JSON:

{
  "o_array" : [
    { "s/1" : "x/y/z" },
    { "s2" : "&lt;a href='/x/y'&gt;Link&lt;/a&gt; a/b \"test\"" }
  ]
}

补充说明

  • 关于string/@escape和string/@escape-key:这两个属性是用来控制是否对JSON键或值中的特殊字符(如双引号、换行)进行转义,但无法控制斜杠的转义行为,也无法改变XML属性的引号类型,因此不适用你的场景。
  • 确保使用的是支持这些扩展选项的Saxon版本(建议Saxon 9.8及以上),因为这些是Saxon特有的功能,并非XSLT 3.0标准的一部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:48:57