【发布时间】:2016-10-14 10:43:06
【问题描述】:
我是 XML 和 XSL 的新手。我正在尝试获取由我们的供应商软件生成的 XML 字符串并将其转换为 Excel 格式。 XML 可以有重复的行,每行都有许多关联的子字段。子字段在每行之间总是相同的,并且顺序相同,但在不同的 XML 中可能不同。行数会因文件而异。
我感觉这里有一个 for-each,可能是嵌套的,也可能是使用关系位置,但是我很难将我的头绕在查询函数上。我查看了许多示例,但每个解决方案都是针对该问题量身定制的,但我没有找到一个与我的期望输出一样的解决方案。
任何帮助,或至少在正确方向上的推动,将不胜感激。
谢谢!
示例 XML:
<?xml version="1.0" standalone="yes" ?>
<RpcData SrcNm="SnapshotBuckets" SrcTyp="DIR" ClientID="000" LoanNo="0000000000" Borrower="" RsltCd="0">
<RepeatingFieldSet Nm="Hazard" Type="All Data" Count="3">
<Row Index="1">
<Fld Nm="Type">A</Fld>
<Fld Nm="AgentCode">TESTAP</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">APPLE</Fld>
<Fld Nm="Agent Desc Line 2">PICKERS</Fld>
<Fld Nm="Agent Desc Line 3">123 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1212</Fld>
<Fld Nm="Agent State">AL</Fld>
<Fld Nm="Agent ZIP Code">00001</Fld>
</Row>
<Row Index="2">
<Fld Nm="Type">B</Fld>
<Fld Nm="AgentCode">TESTBA</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">BANANA</Fld>
<Fld Nm="Agent Desc Line 2">BUNCHERS</Fld>
<Fld Nm="Agent Desc Line 3">456 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1213</Fld>
<Fld Nm="Agent State">AK</Fld>
<Fld Nm="Agent ZIP Code">00002</Fld>
</Row>
<Row Index="3">
<Fld Nm="Type">C</Fld>
<Fld Nm="AgentCode">TESTCH</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">CHERRY</Fld>
<Fld Nm="Agent Desc Line 2">PITTERS</Fld>
<Fld Nm="Agent Desc Line 3">789 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1214</Fld>
<Fld Nm="Agent State">CA</Fld>
<Fld Nm="Agent ZIP Code">00003</Fld>
</Row>
</RepeatingFieldSet>
</RpcData>
期望的输出:
字段 1 2 3 类型 A B C 代理代码 TESTAP TESTBA TESTCH 代理城市 ANYTOWN ANYTOWN ANYTOWN Agent Desc Line 1 APPLE BANANA CHERRY Agent Desc Line 2 PICKERS BUNCHERS PITTERS 代理 Desc Line 3 123 MAIN ST 456 MAIN ST 789 MAIN ST 代理电话 (718) 555-1212 (718) 555-1213 (718) 555-1214 代理国 AL AK CA 代理邮编 00001 00002 00003XSL 到目前为止:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel">
<xsl:template match="/">
<xsl:processing-instruction name="mso-application"><xsl:text>progid="Excel.Sheet"</xsl:text></xsl:processing-instruction>
<Workbook>
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell>Business Name</Cell>
<xsl:for-each select="RpcData/RepeatingFieldSet/Row">
<Cell>
<xsl:value-of select="@Index"/>
</Cell>
</xsl:for-each>
</Row>
<xsl:for-each select="RpcData/RepeatingFieldSet/*/Fld">
<Row>
<Cell>
<xsl:value-of select="@Nm"/>
</Cell>
<xsl:for-each select="*">
<Cell>
<xsl:value-of select="."/>
</Cell>
</xsl:for-each>
</Row>
</xsl:for-each>
</Table>
</Worksheet>
</Workbook>
</xsl:template>
</xsl:stylesheet>
【问题讨论】: