[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Convert XML to Excel using XSLT Question II.


Subject: RE: [xsl] Convert XML to Excel using XSLT Question II.
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 19 Jun 2006 23:56:55 +0100

> In the code I attached, in line 22, if I put 
> <xsl:apply-templates select = "/"> then a infinite loop will 
> occur. How does it come a loop? I couldn't understand.

apply-templates selects a node, in this case the root node, and looks for a
template rule matching that node, typically the one that specifies
match="/". If this template rule includes the instruction apply-templates
select="/" then the same thing happens again, and again....


 Also, 
> the result Excel/XML file have the output of "<Cell 
> xmlns="urn:schemas-microsoft-com:office:spreadsheet"><Data
> ss:Type="String"
> xmlns="urn:schemas-microsoft-com:office:spreadsheet">0</Data></Cell>",
> I don't understand how come the cell element has the xmlns attribute?
> How did this happen?

Your stylesheet has a default namespace
xmlns="urn:schemas-microsoft-com:office:spreadsheet". So the <Cell> element
in the stylesheet is really
<{urn:schemas-microsoft-com:office:spreadsheet}Cell>, because an unprefixed
element name is qualified by the default namespace. The effect of a literal
result element like <Cell> is to create an element in the result document
with the same name, that is
<{urn:schemas-microsoft-com:office:spreadsheet}Cell>. But of course this
isn't real XML syntax, so when it gets output as XML it becomes <Cell
xmlns="urn:schemas-microsoft-com:office:spreadsheet">.

Remember that your stylesheet is responsible for creating elements in the
right namespace; the serializer takes care of generating the namespace
declarations to achieve this.

Michael Kay
http://www.saxonica.com/

> 
> Below is the xslt code and xml source code.
> 
> Thanks again for your help.
> 
> Karen.
> ---------
> <?xml version='1.0' encoding='utf-8'?>
> 
> <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">
> <!--	<Worksheet>
> 	<xsl:attribute name="ss:Name">
> 	<xsl:value-of select="name(/*/*/*)"/>
> 	</xsl:attribute> -->
> 	<xsl:apply-templates/>
> <!--	</Worksheet> -->
> 	</Workbook>
> </xsl:template>
> 
> <!--
> <xsl:template match="/*/*">
>   <Worksheet>
>     <xsl:attribute name="ss:Name">
>   <xsl:value-of select="name(/*/*)"/>
>   </xsl:attribute>
> <xsl:apply-templates/>
> </Worksheet>
> </xsl:template>
> -->
> <!--<xsl:template match="NoteDetail">
> test
> <xsl:apply-templates/>
> </xsl:template>
> -->
> 
> <xsl:template match="TAX_CASH_FLOW_ANALYSIS/TaxCashFlowUnit">
>     <Table x:FullColumns="1" x:FullRows="1">
>       <Row>
>         <xsl:for-each select="*[position() = 1]/*">
>           <Cell><Data ss:Type="String">
>           <xsl:value-of select="local-name()"/>
>           </Data></Cell>
>         </xsl:for-each>
>       </Row>
>       <xsl:apply-templates/>
>     </Table>
> </xsl:template>
> 
> <xsl:template 
> match="TAX_CASH_FLOW_ANALYSIS/TaxCashFlowUnit/TaxCashFlowDetail">
>   <Row>
>     <xsl:apply-templates/>
>   </Row>
> </xsl:template>
> 
> <xsl:template 
> match="TAX_CASH_FLOW_ANALYSIS/TaxCashFlowUnit/TaxCashFlowDetail/*">
>   <Cell><Data ss:Type="String">
>     <xsl:value-of select="."/>
>   </Data></Cell>
> </xsl:template>
> 
> 
> </xsl:stylesheet>
> 
> --------------------
> xml source:
> 
> <?xml version="1.0" encoding="utf-8"?>
> <TAX_CASH_FLOW_ANALYSIS 
> UpdateDateTime="2006-06-13T11:26:09.0000000-04:00">
> <TaxCashFlowUnit>
>     <TaxCashFlowDetail>
>       <EndingAIP>786593727.21233881</EndingAIP>
>       <PV>786593727.21233881</PV>
>       <PrecapOID>0</PrecapOID>
>       <OID>0</OID>
>       <RemainingOID>-35744066.285386205</RemainingOID>
>       <TaxableIncome>0</TaxableIncome>
>       <QtrInt>0</QtrInt>
>       <QtrOID>0</QtrOID>
>       <QtrIncome>0</QtrIncome>
>       <QSI>0</QSI>
>       <NQSI>0</NQSI>
>       <Principal>0</Principal>
>       <CurrentBalance>745850848.91000021</CurrentBalance>
>       <MarketDF>0</MarketDF>
>     </TaxCashFlowDetail>
>     <TaxCashFlowDetail>
>       <EndingAIP>786593727.21233881</EndingAIP>
>       <PV>786593727.21233881</PV>
>       <PrecapOID>0</PrecapOID>
>       <OID>0</OID>
>       <RemainingOID>-35744066.285386205</RemainingOID>
>       <TaxableIncome>0</TaxableIncome>
>       <QtrInt>0</QtrInt>
>       <QtrOID>0</QtrOID>
>       <QtrIncome>0</QtrIncome>
>       <QSI>0</QSI>
>       <NQSI>0</NQSI>
>       <Principal>0</Principal>
>       <CurrentBalance>745850848.91000021</CurrentBalance>
>       <MarketDF>0</MarketDF>
>     </TaxCashFlowDetail>
>     <TaxCashFlowDetail>
>       <EndingAIP>786593727.21233881</EndingAIP>
>       <PV>786593727.21233881</PV>
>       <PrecapOID>0</PrecapOID>
>       <OID>0</OID>
>       <RemainingOID>-35744066.285386205</RemainingOID>
>       <TaxableIncome>0</TaxableIncome>
>       <QtrInt>0</QtrInt>
>       <QtrOID>0</QtrOID>
>       <QtrIncome>0</QtrIncome>
>       <QSI>0</QSI>
>       <NQSI>0</NQSI>
>       <Principal>0</Principal>
>       <CurrentBalance>745850848.91000021</CurrentBalance>
>       <MarketDF>0</MarketDF>
>     </TaxCashFlowDetail>
>     </TaxCashFlowUnit>
> </TAX_CASH_FLOW_ANALYSIS>


Current Thread
Keywords