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

XML数据提取至文本文件异常:XSLT配置问题求助

XML转文本格式数据提取修复

问题说明

尝试将XML文件中的数据提取并写入文本文件,已准备好XML与XSLT文件,但未得到预期输出。

原始XML文件

<?xml version="1.0" encoding="utf-8"?>
<MessageStart>
    <Header>
            <College>University of Data</College>
            <State>AAA</State>
            <Country>BBB</Country>
    </Header>
    <Body>
        <Department>
                <DeptNum>001</DeptNum>
                <DeptName>Computers</DeptName>
                <DeptTotal>100</DeptTotal>
        </Department>
        <Department>
                <DeptNum>002</DeptNum>
                <DeptName>IT</DeptName>
                <DeptTotal>200</DeptTotal>
        </Department>
        <Department>
                <DeptNum>003</DeptNum>
                <DeptName>Civil</DeptName>
                <DeptTotal>300</DeptTotal>
        </Department>   
    </Body>
</MessageStart>

原始XSLT文件

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8" omit-xml-declaration="yesy" />
    <xsl:template match="/">
        <xsl:for-each select="MessageStart">
            <xsl:value-of select="Header/College"/><xsl:text>|</xsl:text>
        <xsl:for-each select="Body/Department">
             <xsl:value-of select="DeptNum"/><xsl:text>|</xsl:text>
             <xsl:value-of select="DeptName"/><xsl:text>|</xsl:text>
             <xsl:value-of select="DeptTotal"/>
             <xsl:text>&#10;</xsl:text>
        </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

预期输出

University of Data|AAA|BBB|001|Computers|100 
University of Data|AAA|BBB|002|IT|200
University of Data|AAA|BBB|003|Civil|300

修复后的XSLT文件

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8" omit-xml-declaration="yes" />
    <xsl:template match="/">
        <xsl:for-each select="MessageStart">
            <!-- 存储Header字段值,避免重复查询 -->
            <xsl:variable name="college" select="Header/College"/>
            <xsl:variable name="state" select="Header/State"/>
            <xsl:variable name="country" select="Header/Country"/>
            
            <xsl:for-each select="Body/Department">
                 <xsl:value-of select="$college"/><xsl:text>|</xsl:text>
                 <xsl:value-of select="$state"/><xsl:text>|</xsl:text>
                 <xsl:value-of select="$country"/><xsl:text>|</xsl:text>
                 <xsl:value-of select="DeptNum"/><xsl:text>|</xsl:text>
                 <xsl:value-of select="DeptName"/><xsl:text>|</xsl:text>
                 <xsl:value-of select="DeptTotal"/>
                 <xsl:text>&#10;</xsl:text>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

修复要点

  • 修正输出指令的拼写错误:将omit-xml-declaration="yesy"改为omit-xml-declaration="yes",避免语法错误
  • 将Header的三个字段输出逻辑移至Department循环内部,确保每一行数据都包含完整的头部信息
  • 使用变量存储Header字段值,减少重复的节点查询,提升处理效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:05:33