2010-05-05 103 views
0

我從兩個表CARRIER_IFTA,IFTA_NAME中提取數據。 我的選擇查詢是像下面..如何從數據庫生成XML

SELECT t1.IFTA_LICENSE_NUMBER,t1.IFTA_BASE_STATE,t2.NAME_TYPE,t2.NAME 
from CARRIER_IFTA t1 inner join IFTA_NAME t2 
    on t1.IFTA_LICENSE_NUMBER=t2.IFTA_LICENSE_NUMBER 

我的數據是這樣來了...

IFTA_LICENSE_NUMBER IFTA_BASE_STATE NAME_TYPE NAME 
-------------------------------------------------------- 
630908333     US   LG  XYZ 
630908333     US   MG  PQR 
730908344     US   LG  ABC 

現在使用XSLT我想產生這樣的XML

<T0019> 
    <IFTA_ACCOUNT> 
    <IFTA_LICENSE_NUMBER>630908333</IFTA_LICENSE_NUMBER> 
    <IFTA_BASE_STATE>US</IFTA_BASE_STATE> 
    <IFTA_NAME> 
     <NAME_TYPE>LG<NAME_TYPE> 
     <NAME>XYZ</NAME> 
    </IFTA_NAME> 
    <IFTA_NAME> 
     <NAME_TYPE>MG<NAME_TYPE> 
     <NAME>PQR</NAME> 
    <IFTA_NAME> 
    </IFTA_ACCOUNT> 
    <IFTA_ACCOUNT> 
    <IFTA_LICENSE_NUMBER>730908344</IFTA_LICENSE_NUMBER> 
    <IFTA_BASE_STATE>US</IFTA_BASE_STATE> 
    <IFTA_NAME> 
     <NAME_TYPE>LG<NAME_TYPE> 
     <NAME>ABC</NAME> 
    </IFTA_NAME> 
    </IFTA_ACCOUNT>  

</T0019> 

我已經使用下面的xslt,但它不是給我的願望結果...

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="/ROWSET"> 
     <xsl:element name="T0019"> 
      <xsl:apply-templates select="IFTAACCOUNT"/> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="IFTAACCOUNT"> 
     <xsl:element name="IFTAACCOUNT"> 
      <xsl:apply-templates select="IFTA_CARRIER_ID_NUMBER"/> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="IFTA_LICENSE_NUMBER"> 
      <xsl:element name="IFTA_LICENSE_NUMBER"> 
       <xsl:apply-templates /> 
      </xsl:element> 
    </xsl:template> 

<xsl:template match="IFTA_BASE_STATE"> 
      <xsl:element name="IFTA_BASE_STATE"> 
       <xsl:apply-templates /> 
      </xsl:element> 
    </xsl:template> 
<xsl:template match="IRP_NAME"> 
    <IRP_NAME> 
     <xsl:apply-templates select="NAME"/>  
     <xsl:apply-templates select="NAME_TYPE"/>  
    </IRP_NAME>    
    </xsl:template> 

    <xsl:template match="NAME"> 
      <xsl:element name="NAME"> 
       <xsl:value-of select="." /> 
      </xsl:element> 
    </xsl:template> 

    <xsl:template match="NAME_TYPE"> 
      <xsl:element name="NAME_TYPE"> 
       <xsl:apply-templates /> 
      </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

,但它是不是給慾望的結果......

請幫我...

在此先感謝...

+1

您可以提供您傳遞給XSLT的XML示例嗎?您的查詢返回一個簡單的行集,因此在應用XSLT之前,至少必須將XML轉換成某處。 – 2010-05-05 12:23:31

+0

Actully我試圖使用XSLT將它直接從數據庫轉換爲XML。我是否應該生成中間XML,然後將其轉換爲My Result xml? – 2010-05-05 12:59:58

+0

是的,XSLT只能將XML轉換爲其他內容。我沒有意識到使用XSLT讀取XML以外的其他方法。 – ilikeorangutans 2010-05-05 13:46:32

回答

1

多數RDBMS提供了內置的工具,而無需返回XML直XSL。你在使用哪一個?請查閱其文檔。如果它是例如MySQL,那麼你需要--xml option

+0

這就對了我正在使用Oracle的OracleXMLQuery從Oracle的表中生成xml。 – 2010-05-05 14:29:50

+0

哦,你真的想把一個XML轉換成另一個XML嗎?我不做Oracle,但據我所知,您可以自定義由Oracle生成的XML輸出? – BalusC 2010-05-05 18:21:56

+0

不,我想使用OracleXMLQuery從Oracle數據庫生成XML。 – 2010-05-06 03:53:52