嗨,我有一个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
答案 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> </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。