2011-03-07 135 views
0

喜有一個XML像波紋管XSLT問題問題

<NewDataSet> 
    <Table> 
     <CTD_REC_TYPE_ID>5</CTD_REC_TYPE_ID> 
     <CTD_BEN_INS_ID>0048201515</CTD_BEN_INS_ID> 
     <CTD_CURR_CODE>2</CTD_CURR_CODE> 
     <CTD_ORD_CUST_ACT>CACC</CTD_ORD_CUST_ACT> 
     <CTD_CTD_PKG_ID>6</CTD_CTD_PKG_ID> 
    </Table> 
    <Table> 
     <CTD_REC_TYPE_ID>5</CTD_REC_TYPE_ID> 
     <CTD_BEN_INS_ID>004820101</CTD_BEN_INS_ID> 
     <CTD_CURR_CODE>2</CTD_CURR_CODE> 
     <CTD_ORD_CUST_ACT>CACC</CTD_ORD_CUST_ACT> 
     <CTD_CTD_PKG_ID>6</CTD_CTD_PKG_ID> 
    </Table> 
    <Table> 
     <CTD_REC_TYPE_ID>5</CTD_REC_TYPE_ID> 
     <CTD_BEN_INS_ID>004820101</CTD_BEN_INS_ID> 
     <CTD_CURR_CODE>2</CTD_CURR_CODE> 
     <CTD_ORD_CUST_ACT>CACC</CTD_ORD_CUST_ACT> 
     <CTD_CTD_PKG_ID>3</CTD_CTD_PKG_ID> 
    </Table> 
</NewDataSet> 
在上面的XML每個表

的所有IM必須集中精力<CTD_CTD_PKG_ID>3</CTD_CTD_PKG_ID>(包號),如果上面的例子來時,我們有在XML三個表pkg id 6,6,3六重複了兩次,因爲我已經連接了兩個類似的表並將其作爲一個csv文件並將其他pkg id替換爲3我們準備了單獨的csv文件,以便我們需要編寫xslt可以任意一個請幫助我.... asap

+1

如果您可以將您的預期輸出添加到問題中,它將有所幫助。 – dogbane 2011-03-07 11:43:15

+3

最近你問了很多XSLT問題,他們的配方還很差。請付出一些努力。 – Flack 2011-03-07 11:45:24

+0

輸出如:5,0048201515,2,cacc,6 5,004820101,2,cacc,6這些記錄應該生成一個csv文件剩餘的一個記錄5,004820101,2,cacc,3在另一個csv文件中 – praveen 2011-03-07 11:46:55

回答

1

如果您需要n不同的輸出文件,您將需要運行您的轉換n次,每次都將期望的<CTD_CTD_PKG_ID>值作爲過濾器參數。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no" omit-xml-declaration="yes" /> 

    <!-- sample value hardcoded here for demonstration --> 
    <xsl:param name="filterid" select="3" /> 

    <!-- 
     for implementation just declare param 
     <xsl:param name="filterid" /> 
    --> 

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

    <xsl:template match="NewDataSet"> 
     <xsl:for-each select="Table[CTD_CTD_PKG_ID = $filterid]"> 
      <xsl:text/><xsl:value-of select="./CTD_REC_TYPE_ID"/>;<xsl:text/> 
      <xsl:text/><xsl:value-of select="./CTD_BEN_INS_ID"/>;<xsl:text/> 
      <xsl:text/><xsl:value-of select="./CTD_CURR_CODE"/>;<xsl:text/> 
      <xsl:text/><xsl:value-of select="./CTD_ORD_CUST_ACT"/>;<xsl:text/> 
      <xsl:text/><xsl:value-of select="./CTD_CTD_PKG_ID"/><xsl:text/> 
      <xsl:text>&#13;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

你如何通過帕拉姆值filterid取決於您所使用的轉換引擎。

如果使用的示例XML數據這個XSLT,您將收到

5;004820101;2;CACC;3 

爲你的結果。

如果設置<xsl:param name="filterid" select="6" />,您將收到

5;0048201515;2;CACC;6 
5;004820101;2;CACC;6 

關於如何將參數提交給使用.NET框架XSLT參考見XslCompiledTransform.Transform with XsltArgumentList

+0

@filburt ..im沒有得到這個xslt的輸出可以簡單地解釋 – praveen 2011-03-08 06:21:30

+0

@praveen如果你沒有得到任何輸出您的Xml與您在帖子中提供的示例不同。查看我更新後的答案,瞭解如何將參數值提交給xslt樣式表。 – Filburt 2011-03-08 09:06:59

+0

@filburt thnx很多得到xactly結果..但我掙扎着如何將變量傳遞給vb.net窗口中的xslt窗體 – praveen 2011-03-08 11:14:22