2011-03-07 234 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