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

XSLT转换XML到CSV仅提取WorkInfo节点无输出问题求助

解决XSLT转换XML到CSV空结果的问题

嘿,我来帮你排查下问题,你的XSLT代码和XML里有几个关键错误,导致输出为空,咱们一个个说清楚:

主要错误点

  • XML与XSLT元素大小写不匹配:XML里的工作信息节点是<WorkInfo>(首字母大写),但你在XSLT里写的是workInfo(全小写)。XML是严格区分大小写的,这直接导致XSLT找不到目标节点。另外你的XML里还有个小错误:闭合标签是</workInfo>,应该改成</WorkInfo>,否则XML本身解析就会出问题。
  • 路径选择错误:根模板match="/"后,你直接写select="workInfo",但workInfo不是根节点的直接子节点,正确的路径应该是Employees/Employee/WorkInfo(或者进一步定位到它的子节点)。
  • 错误使用<xsl:copy-of>:这个指令会复制整个节点(包括标签),但你需要的是节点里的文本内容,应该用<xsl:value-of>来提取文本。
  • 模板未正确闭合:你的<xsl:template match="PersonalInfo">后面没有写闭合的</xsl:template>,这会导致XSLT解析失败。
  • 多余的模板调用:你本来想忽略PersonalInfo,但根模板里还是调用了<xsl:apply-templates select="PersonalInfo"/>,其实完全可以去掉这个调用,或者写个空模板直接忽略它。

修正后的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>

    <!-- 匹配根节点,定位到所有Employee下的WorkInfo子节点 -->
    <xsl:template match="/">
        <xsl:apply-templates select="Employees/Employee/WorkInfo/*"/>
    </xsl:template>

    <!-- 处理WorkInfo的每个子节点,输出文本并添加分隔符 -->
    <xsl:template match="WorkInfo/*">
        <xsl:value-of select="."/>
        <!-- 最后一个子节点不输出逗号 -->
        <xsl:if test="not(position()=last())">,</xsl:if>
    </xsl:template>

    <!-- 直接忽略PersonalInfo节点,不做任何处理 -->
    <xsl:template match="PersonalInfo"/>
</xsl:stylesheet>

代码说明

  1. 根模板直接定位到Employees/Employee/WorkInfo/*,也就是WorkInfo下的所有子元素(Skill、Experience、PreviousCompany),确保只处理你需要的内容。
  2. 针对WorkInfo的子节点,用<xsl:value-of>提取文本内容,并且通过position()=last()判断,只有非最后一个节点才添加逗号,避免末尾多余的分隔符。
  3. 专门写了一个匹配PersonalInfo的空模板,确保这个节点被完全忽略,不会输出任何内容。

用这个修正后的代码,配合修正了闭合标签的XML,就能得到你期望的输出:Java,10,XYZ。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:43