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

如何用XSLT提取XML多标签值并拼接生成目标CSV

解决XML转CSV时提取同层级及上层标签值的问题

我明白你现在的困扰——要把XML里上层的公共字段(比如LocationCode、PayrunNumber这些)和每个Payslip的明细放在同一行CSV里,不知道怎么在遍历Payslip的时候同时拿到上层的值对吧?其实很简单,利用XSLT的节点路径定位就能搞定,我给你修改好XSLT代码,再一步步解释:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
    
    <xsl:template match="/">
        <!-- 先写CSV表头,包含所有需要的字段 -->
        LocationCode,LocationDescription,PayrunNumber,CompanyCode,CompanyName,StaffNumber,StaffName,AmountNet,ComponentType,Code,LeaveDescription,StartDate,EndDate&#xA;
        
        <!-- 遍历每个Payslip节点 -->
        <xsl:for-each select="//PayLocation/CompanyDetails/Payslip">
            <!-- 拼接所有字段:先取上层公共字段,再取Payslip自身的明细 -->
            <xsl:value-of select="concat(
                ancestor::PayLocation/LocationCode, ',',
                ancestor::PayLocation/LocationDescription, ',',
                ancestor::PayLocation/PayrunDetails/PayrunNumber, ',',
                ../CompanyCode, ',',
                ../CompanyName, ',',
                StaffNumber, ',',
                StaffName, ',',
                PayDetails/AmountNet, ',',
                PayDetails/ComponentDetails/ComponentType, ',',
                PayDetails/ComponentDetails/Code, ',',
                LeaveTaken/Description, ',',
                LeaveTaken/StartDate, ',',
                LeaveTaken/EndDate, '&#xA;'
            )"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键知识点解释:

  1. 获取上层公共字段:
    • 当你在遍历Payslip节点时,想要回到它的上层PayLocation节点,用ancestor::PayLocation就能定位到最顶层的PayLocation父节点,然后就可以取它下面的LocationCode、PayrunDetails/PayrunNumber等值。
    • 要取CompanyDetails里的CompanyCode和CompanyName,因为Payslip是CompanyDetails的直接子节点,用../就能回到父节点CompanyDetails,再取对应的子节点值就行。
  2. 表头和换行:
    • 先写出完整的CSV表头,确保和后面的字段顺序一致。
    • 每个Payslip记录结束后用&#xA;换行,保证每行对应一个员工的薪资记录。
  3. 空值处理:
    • 像XML里空的StartDate、EndDate,concat的时候会自动保留空的逗号分隔位,符合CSV的格式要求。

用这个XSLT处理你的XML,就能得到和你期望一致的CSV输出啦——每行都包含上层的公共信息和对应员工的薪资明细。如果之后需要添加更多字段,按照这个路径定位的方法扩展就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:45