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

如何在XSLT中不使用变量获取节点值并完成XML格式转换?

你编写的XSLT主要存在语法错误、路径错误、节点大小写未区分、模板触发逻辑断层几类问题,以下是无需使用变量、完全基于相对路径定位实现需求的正确XSLT代码:

实现逻辑说明:

  • 直接通过层级相对路径定位节点,无需存储变量
  • 区分原XML中大小写不同的<pays>和<Pays>节点分别取值
  • 修正所有语法错误和模板嵌套逻辑
<xsl:stylesheet extension-element-prefixes="dp apim" version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>

<xsl:template match="documents">
    <soapenv:Envelope>
        <soapenv:Header/>
        <soapenv:Body>
            <xsl:apply-templates select="document/locations/location/companies" />
        </soapenv:Body>
    </soapenv:Envelope>
</xsl:template>

<xsl:template match="companies">
    <empdetails>
        <details>
            <emptype>
                <xsl:value-of select="company/type"/>
            </emptype> 
            <ID>
                <xsl:value-of select="company/empid"/>
            </ID>
            <!-- 取小写pays节点下的薪资值 -->
            <Payment>
                <xsl:value-of select="company/pays/pay/pay1"/>
            </Payment>
            <Payment2>
                <xsl:value-of select="company/pays/pay/pay2"/>
            </Payment2>
            <!-- 取大写Pays节点下的应缴值,你预期输出中的50k与原XML的2L不符,如需转换可在此处扩展逻辑,若要完全匹配预期直接写固定值50k即可 -->
            <dueperyr>
                <xsl:value-of select="company/Pays/pay/due"/>
            </dueperyr>     
            <duemonth>
                <xsl:value-of select="company/Pays/pay/month"/>
            </duemonth>    
        </details>
    </empdetails> 
</xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:12:01