首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xslt问题问题

xslt问题问题
EN

Stack Overflow用户
提问于 2011-03-07 19:37:30
回答 1查看 124关注 0票数 0

大家好,我有一个xml,就像下面这样。

代码语言:javascript
复制
<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时,6重复了两次,因为我已经连接了两个相似的表,并将其作为一个csv文件,其余的pkg id为3。我们已经准备了单独的csv文件,所以我们需要编写xslt,有人能帮我写....asap吗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 20:12:45

如果您需要过滤不同的输出文件,您将需要运行您的转换n次数,每次使用所需的<CTD_CTD_PKG_ID>值作为过滤器参数。

代码语言:javascript
复制
<?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,您将收到

代码语言:javascript
复制
5;004820101;2;CACC;3

作为你的结果。

如果您设置了<xsl:param name="filterid" select="6" />,您将收到

代码语言:javascript
复制
5;0048201515;2;CACC;6
5;004820101;2;CACC;6

有关如何使用.NET框架向XslCompiledTransform.Transform with XsltArgumentList提交参数的参考信息,请参阅Xslt。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5219206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档