xslt问题

时间:2011-03-07 11:37:30

标签: xml vb.net xslt

嗨,我有一个xml像bellow

<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中,每个表必须集中<CTD_CTD_PKG_ID>3</CTD_CTD_PKG_ID>(包id),就像上面的例子我们在那个xml中有三个表来到pkg id 6,6,3六次重复两次我已经连接了两个相似的表和make作为一个csv文件并休息其他pkg id为3我们准备了单独的csv文件以便我们需要编写xslt可以任何人帮助我.... asap

1 个答案:

答案 0 :(得分: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