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> </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> </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
相关产品推荐
相关产品推荐

