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

使用XSLT遍历JSON文档时无法提取name字段问题咨询

问题原因分析

你当前的代码存在两处核心路径错误:

  • JSON转XML后的结构层次和你写的XPath不匹配:原JSON最外层map下首先是data字段对应的子map,file数组在这个子map下,你直接从最外层map下找array[@key='file']本身就找不到对应节点
  • 你遍历的是file数组本身,而不是数组内的每个对象,且取name的路径完全错误:name是数组内每个对象的子字段,不是数组父节点的字段
修正后的完整XSLT样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.0"
    xmlns="http://www.w3.org/2005/xpath-functions" xpath-default-namespace="http://www.w3.org/2005/xpath-functions" expand-text="yes">
    <xsl:param name="input"/>
    <xsl:output method="text"/>
    
    <xsl:template name="xsl:initial-template">
        <xsl:variable name="input-as-xml" select="json-to-xml($input)"/>
        <!-- 用array包裹输出所有file对象提取后的结果 -->
        <xsl:variable name="transformed-xml" as="element(array)">
            <array>
                <!-- 定位到file数组,遍历数组内的每个map对象 -->
                <xsl:for-each select="$input-as-xml/map/map[@key='data']/array[@key='file']/map">
                    <map>
                        <string key="date">
                            <!-- 直接取当前遍历对象下的name字段值 -->
                            <xsl:value-of select="string[@key='name']"/>
                        </string>
                    </map>
                </xsl:for-each>
            </array>
        </xsl:variable>
        <xsl:value-of select="xml-to-json($transformed-xml)"/>
    </xsl:template>
</xsl:stylesheet>
输出结果

运行后得到的提取结果如下:

[{"date":"harsha"},{"date":"manohar"}]

如果你只需要输出单个和你原格式对齐的结果,只需要调整XPath取数组的第一个元素即可,不需要外层array包裹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:06:04