XSL将XML转换成Excel

这里的新人很受我的欢迎。 我有一个基本的XSL文件,将读取我的XML数据。 我试图把XML到Excel中。 inheritance人我的问题。 有了一个小的XML文件,它似乎很容易转换它,但这个XML文件,有几个节点(我认为他们被称为),当我调用的数据,它不正确。 我只想显示来自XML的检查部分的信息,然后以显示我想要的6或7列的方式在Excel中显示,然后显示数据。 下面是我到目前为止:

XML:

<bdiData> <documentControlInfo> <documentInfo> <docDescription>Checks for Company X</docDescription> <docID> <ID>123456789</ID> </docID> <docModifier>My Company</docModifier> <docCreateDate>2010-08-23</docCreateDate> <docCreateTime>07:08:54-0700</docCreateTime> <standardVersion>1.0</standardVersion> <testIndicator>0</testIndicator> <resendIndicator>0</resendIndicator> </documentInfo> <sourceInfo> <sourceName>My Banking Name</sourceName> <sourceID> <idOther>ShortBankName</idOther> </sourceID> </sourceInfo> <destinationInfo> <destinationName>My Company</destinationName> <destinationID> <idOther>MYCO</idOther> </destinationID> </destinationInfo> </documentControlInfo> <checkItemCollection> <collectionInfo> <description>Items</description> <ID>654811650</ID> <Classification> <classification>Items</classification> </Classification> </collectionInfo> <checkItemBatch> <checkItemBatchInfo> <description>Paid Checks</description> <ID>1239668334710</ID> <Classification> <classification>Paid Checks</classification> </Classification> </checkItemBatchInfo> <checkItem> <checkItemType>check</checkItemType> <checkAmount>2960</checkAmount> <postingInfo> <date>2009-06-12</date> <RT>87654321</RT> <accountNumber>123465798</accountNumber> <seqNum>007725552898</seqNum> <trancode>001152</trancode> <amount>2960</amount> <serialNumber>55225410</serialNumber> </postingInfo> 

XSL文件:

 <xsl:stylesheet version="1.0" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" > <xsl:template match="/"> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <xsl:apply-templates/> </Workbook> </xsl:template> <xsl:template match="/*"> <Worksheet> <xsl:attribute name="ss:Name"> <xsl:value-of select="local-name(/*/*)"/> </xsl:attribute> <Table x:FullColumns="1" x:FullRows="1"> <Row> <xsl:for-each select="*[position() = 2]/*/checkItem/postingInfo/*"> <Cell> <Data ss:Type="String"> <xsl:value-of select="local-name()"/> </Data> </Cell> </xsl:for-each> </Row> <xsl:apply-templates/> </Table> </Worksheet> </xsl:template> <xsl:template match="/*/checkItem/postingInfo/*"> <Row> <xsl:apply-templates/> </Row> </xsl:template> <xsl:template match="/*/checkItem/postingInfo/*"> <Cell> <Data ss:Type="String"> <xsl:value-of select="."/> </Data> </Cell> </xsl:template> </xsl:stylesheet> 

有没有人有任何想法如何我可以得到JUSt检查部分的XML文件,并以一种方式格式?

谢谢

GabrielVA

我想你需要这个样式表:

 <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">progid="Excel.Sheet"</xsl:processing-instruction> <Workbook> <xsl:apply-templates/> </Workbook> </xsl:template> <xsl:template match="/*"> <Worksheet ss:Name="{*/*/*[local-name()='docDescription']}"> <Table x:FullColumns="1" x:FullRows="1"> <Row> <xsl:for-each select="*/*/*[local-name()='checkItem'][1]//*[not(*)]"> <Cell> <Data ss:Type="String"> <xsl:value-of select="local-name()"/> </Data> </Cell> </xsl:for-each> </Row> <xsl:apply-templates select="*/*/*[local-name()='checkItem']"/> </Table> </Worksheet> </xsl:template> <xsl:template match="*[local-name()='checkItem']" priority="1"> <Row> <xsl:apply-templates select=".//*[not(*)]"/> </Row> </xsl:template> <xsl:template match="*[not(*)]"> <Cell> <Data ss:Type="String"> <xsl:value-of select="."/> </Data> </Cell> </xsl:template> </xsl:stylesheet> 

有了这个input(合适的格式):

 <bdiData> <documentControlInfo> <documentInfo> <docDescription>Checks for Company X</docDescription> <docID> <ID>123456789</ID> </docID> <docModifier>My Company</docModifier> <docCreateDate>2010-08-23</docCreateDate> <docCreateTime>07:08:54-0700</docCreateTime> <standardVersion>1.0</standardVersion> <testIndicator>0</testIndicator> <resendIndicator>0</resendIndicator> </documentInfo> <sourceInfo> <sourceName>My Banking Name</sourceName> <sourceID> <idOther>ShortBankName</idOther> </sourceID> </sourceInfo> <destinationInfo> <destinationName>My Company</destinationName> <destinationID> <idOther>MYCO</idOther> </destinationID> </destinationInfo> </documentControlInfo> <checkItemCollection> <collectionInfo> <description>Items</description> <ID>654811650</ID> <Classification> <classification>Items</classification> </Classification> </collectionInfo> <checkItemBatch> <checkItemBatchInfo> <description>Paid Checks</description> <ID>1239668334710</ID> <Classification> <classification>Paid Checks</classification> </Classification> </checkItemBatchInfo> <checkItem> <checkItemType>check</checkItemType> <checkAmount>2960</checkAmount> <postingInfo> <date>2009-06-12</date> <RT>87654321</RT> <accountNumber>123465798</accountNumber> <seqNum>007725552898</seqNum> <trancode>001152</trancode> <amount>2960</amount> <serialNumber>55225410</serialNumber> </postingInfo> </checkItem> </checkItemBatch> </checkItemCollection> </bdiData> 

输出:

 <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel"> <Worksheet ss:Name="Checks for Company X"> <Table x:FullColumns="1" x:FullRows="1"> <Row> <Cell> <Data ss:Type="String">checkItemType</Data> </Cell> <Cell> <Data ss:Type="String">checkAmount</Data> </Cell> <Cell> <Data ss:Type="String">date</Data> </Cell> <Cell> <Data ss:Type="String">RT</Data> </Cell> <Cell> <Data ss:Type="String">accountNumber</Data> </Cell> <Cell> <Data ss:Type="String">seqNum</Data> </Cell> <Cell> <Data ss:Type="String">trancode</Data> </Cell> <Cell> <Data ss:Type="String">amount</Data> </Cell> <Cell> <Data ss:Type="String">serialNumber</Data> </Cell> </Row> <Row> <Cell> <Data ss:Type="String">check</Data> </Cell> <Cell> <Data ss:Type="String">2960</Data> </Cell> <Cell> <Data ss:Type="String">2009-06-12</Data> </Cell> <Cell> <Data ss:Type="String">87654321</Data> </Cell> <Cell> <Data ss:Type="String">123465798</Data> </Cell> <Cell> <Data ss:Type="String">007725552898</Data> </Cell> <Cell> <Data ss:Type="String">001152</Data> </Cell> <Cell> <Data ss:Type="String">2960</Data> </Cell> <Cell> <Data ss:Type="String">55225410</Data> </Cell> </Row> </Table> </Worksheet> </Workbook> 

这是由Excel正确打开。

注意 :那些fn:local-name()在那里,因为你的input样本是不可靠的。