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

如何使用XSLT读取XML中嵌入的JSON值并用于DOT格式转换?

XSL解析XML内JSON数组提取url的实现方案

适用XSLT 3.0版本(推荐,原生支持JSON解析)

XSLT 3.0 内置json-to-xml()函数,可以直接将JSON结构转换为可遍历的XML节点树,实现代码如下:

<!-- 核心逻辑片段,可直接嵌入你现有DOT生成的XSL代码中 -->
<xsl:template match="Row">
  <!-- 先读取items节点的JSON内容,转换为XML节点树 -->
  <xsl:variable name="items-json" select="json-to-xml(items/text())"/>
  <!-- 遍历所有url字段 -->
  <xsl:for-each select="$items-json//*[@key='url']">
    <!-- 替换路径前缀:把/tampilanData/换成/displayData/ -->
    <xsl:variable name="adjusted-url" select="replace(., '/tampilanData/', '/displayData/')"/>
    <!-- 这里把$adjusted-url填入你需要输出DOT的对应位置即可,示例如下: -->
    <xsl:text>Node [label="</xsl:text>
    <xsl:value-of select="$adjusted-url"/>
    <xsl:text>"];&#10;</xsl:text>
  </xsl:for-each>

  <!-- 你原有获取role等普通节点的逻辑保留即可 -->
  <xsl:value-of select="role"/>
</xsl:template>

逻辑说明

  • 调用json-to-xml()后,JSON数组的每个对象会被转为map节点,键名对应@key属性,键值就是节点文本
  • 用replace()函数直接匹配路径前缀替换,自动得到你需要的/displayData/xxx格式路径
  • 遍历过程中可以直接输出DOT语法的节点、边定义即可

适用XSLT 1.0/2.0版本(无原生JSON支持)

如果你的XSLT处理器不支持3.0版本,可以用字符串切割的方式提取url:

<xsl:template match="Row">
  <xsl:call-template name="extract-urls">
    <xsl:with-param name="json-content" select="items/text()"/>
  </xsl:call-template>
  <!-- 原有其他逻辑保留 -->
</xsl:template>

<!-- 递归提取url的自定义模板 -->
<xsl:template name="extract-urls">
  <xsl:param name="json-content"/>
  <xsl:choose>
    <xsl:when test="contains($json-content, '&quot;url&quot;: &quot;')">
      <xsl:variable name="after-url-prefix" select="substring-after($json-content, '&quot;url&quot;: &quot;')"/>
      <xsl:variable name="raw-url" select="substring-before($after-url-prefix, '&quot;')"/>
      <xsl:variable name="adjusted-url" select="concat('/displayData/', substring-after($raw-url, '/tampilanData/'))"/>
      <!-- 输出调整后的url到DOT对应位置 -->
      <xsl:value-of select="$adjusted-url"/>
      <xsl:text>&#10;</xsl:text>
      <!-- 递归处理剩余的JSON内容 -->
      <xsl:call-template name="extract-urls">
        <xsl:with-param name="json-content" select="substring-after($after-url-prefix, '&quot;')"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise/>
  </xsl:choose>
</xsl:template>

注意事项

  • 字符串切割方案依赖你当前JSON的固定格式,即url字段的键值对固定为"url": "xxx"的格式,没有多余空格
  • 路径替换用字符串拼接的方式实现,同样匹配固定前缀/tampilanData/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:03