Skip to Main Content

Database Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

XML to XLS

903224Feb 22 2012 — edited Feb 23 2012
DECLARE
   xsldoc    XMLTYPE
      := xmltype (
            '<?xml version="1.0" encoding="iso-8859-15"?>
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 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">
 <xsl:output method="xml" version="1.0" encoding="iso-8859-15" indent="no"/>
 <xsl:template match="/">
  <xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction>
  <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">
   <Styles>
    <Style ss:ID="h">
     <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
    </Style>
   </Styles>
   <xsl:apply-templates/>
  </Workbook>
 </xsl:template>
 <xsl:template match="ROWSET">
  <Worksheet ss:Name="{@CONSTANT}">
   <Table>
    <Row>
     <xsl:for-each select="ROW[1]/*">
      <Cell ss:StyleID="h">
       <Data ss:Type="String">
        <xsl:value-of select="translate(local-name(), ''_'', '' '')"/>
       </Data>
      </Cell>
     </xsl:for-each>
    </Row>
    <xsl:apply-templates/>
   </Table>
   <x:WorksheetOptions>
    <x:FrozenNoSplit/>
    <x:SplitHorizontal>1</x:SplitHorizontal>
    <x:TopRowBottomPane>1</x:TopRowBottomPane>
    <x:ActivePane>2</x:ActivePane>
    <xsl:if test="@COLOR">
     <x:TabColorIndex><xsl:value-of select="@COLOR"/></x:TabColorIndex>
    </xsl:if>
   </x:WorksheetOptions>
  </Worksheet>
 </xsl:template>
 <xsl:template match="ROW">
  <Row>
   <xsl:apply-templates/>
  </Row>
 </xsl:template>
 <xsl:template match="ROW/*">
  <Cell>
   <Data ss:Type="String">
    <xsl:value-of select="."/>
   </Data>
  </Cell>
 </xsl:template>
</xsl:stylesheet>');

   xmldoc    CLOB;
   xmldoc1   CLOB;
BEGIN
     SELECT XMLTRANSFORM (
               XMLELEMENT (
                  "ROOT",
                  XMLAGG (
                     XMLELEMENT (
                        "ROWSET",
                        xmlattributes (1 AS "CONSTANT"),
                        XMLAGG (
                           XMLELEMENT ("ROW",
                                       XMLELEMENT ("ID", A),
                                       XMLELEMENT ("Job", 1)))))),
               xsldoc).getclobval ()
       INTO xmldoc
       FROM (SELECT 1 A FROM DUAL
             UNION ALL
             SELECT 2 FROM DUAL)
   GROUP BY 1;


   DBMS_XSLPROCESSOR.clob2file (xmldoc,
                                'DIR',
                                'tst.xls',
                                NLS_CHARSET_ID ('UTF8'));


     SELECT XMLTRANSFORM (
               XMLELEMENT (
                  "ROOT",
                  XMLAGG (
                     XMLELEMENT (
                        "ROWSET",
                        xmlattributes (1 AS "CONSTANT"),
                        XMLAGG (
                           XMLELEMENT ("ROW",
                                       XMLELEMENT ("ID", A),
                                       XMLELEMENT ("Job", 1)))))),
               xsldoc).getclobval ()
       INTO xmldoc
       FROM (SELECT 3 A FROM DUAL
             UNION ALL
             SELECT 4 FROM DUAL)
   GROUP BY 1;



   DBMS_XSLPROCESSOR.clob2file (xmldoc,
                                'DIR',
                                'tst.xls',
                                NLS_CHARSET_ID ('UTF8'));
END;
How to get below output in a single worksheet?

ID Job

1 1
2 1

ID Job

3 1
4 1

now getting

A Job

3 1
4 1
This post has been answered by odie_63 on Feb 22 2012
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 22 2012
Added on Feb 22 2012
2 comments
1,533 views