这里的新人如此忍受我.我有一个基本的XSL文件,它将读取我的xml数据.我试图将xml放入Excel.继承人我的问题.使用一个小的
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>
有了这个输入(适当的良好形成):
<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()是因为您的输入样本不可靠.