xsl-list
[Top] [All Lists]

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

2006-06-19 15:57:21
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>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--