2010-05-05 101 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