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

如何在XSLT 3.0中读取JSON对象并查询键值对

在XSLT 3.0中结合JSON例外词表实现自定义断词逻辑

1. 读取并解析JSON例外词表

在XSLT 3.0中,可通过fn:json-doc()函数直接读取并解析JSON文件,将其转换为XPath的map类型(对应JSON对象),方便后续通过键值快速访问。先在样式表中定义全局变量$exceptions:

<xsl:stylesheet version="3.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:map="http://www.w3.org/2005/xpath-functions/map"
                xmlns:fn="http://www.w3.org/2005/xpath-functions">

  <!-- 读取并解析JSON例外词表 -->
  <xsl:variable name="exceptions" select="json-doc('exceptions.json')"/>

  <!-- 其他模板与逻辑 -->
</xsl:stylesheet>

json-doc()会自动完成JSON到XPath map的映射:

  • 顶级JSON对象 → 顶级map(键为语言代码"en"、"de"等)
  • 语言对应的子对象 → 子map(键为目标单词,值为预定义断词结果)

2. 修改断词模板实现例外逻辑

修改原有的文本匹配模板,在调用fn:hyphenate()前先检查当前单词是否在对应语言的例外词表中:

<xsl:template match="p[lang('en')]/text()">
  <xsl:analyze-string select="." regex="\w+">
    <xsl:matching-substring>
      <xsl:choose>
        <!-- 检查当前单词是否在英文例外词表中 -->
        <xsl:when test="map:contains($exceptions?en, .)">
          <!-- 返回预定义的断词结果 -->
          <xsl:value-of select="$exceptions?en(.)"/>
        </xsl:when>
        <xsl:otherwise>
          <!-- 无例外时调用默认断词函数 -->
          <xsl:value-of select="fn:hyphenate(., '­', 'en')"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

关键逻辑说明:

  • $exceptions?en:通过?操作符安全访问顶级map中的"en"子map(若不存在则返回空,避免报错)
  • map:contains($exceptions?en, .):检查当前匹配的单词(.代表<xsl:matching-substring>中的匹配内容)是否是子map的键
  • $exceptions?en(.):通过键访问子map中的值,直接返回预定义断词结果

3. 多语言扩展提示

如果需要支持多语言(比如示例中的德语"de"),可根据当前节点的语言动态切换子map:

<xsl:template match="p/text()">
  <xsl:variable name="current-lang" select="lang(.)"/>
  <xsl:analyze-string select="." regex="\w+">
    <xsl:matching-substring>
      <xsl:choose>
        <xsl:when test="map:contains($exceptions?($current-lang), .)">
          <xsl:value-of select="$exceptions?($current-lang)(.)"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="fn:hyphenate(., '­', $current-lang)"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:16:11