|
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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Convert XML to Excel using XS, Karen Yang | Thread | Re: [xsl] Convert XML to Excel usin, Karen Yang |
| [xsl] Convert XML to Excel using XS, Karen Yang | Date | [xsl] XSLT Path, oknam park |
| Month |