проблема xslt - PullRequest
       4

проблема xslt

0 голосов
/ 07 марта 2011

Привет всем, у меня есть один xml, как показано ниже

<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> (идентификатор пакета), как если бы в приведенном выше примере у нас было три таблицы в этом xml при приходедля pkg id 6,6,3 шесть повторялось два раза для того, чтобы я объединил эти две одинаковые таблицы и сделал один csv-файл, а остальные pkg id оставил для 3, мы подготовили отдельный csv-файл, так что нам нужно написать xslt может любойпомогите мне, пожалуйста .... как можно скорее

1 Ответ

1 голос
/ 07 марта 2011

Если вам нужно 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 зависит от используемого вами механизма преобразования.

Если вы используете этот Xslt для данных примера XML, вы получите

5;004820101;2;CACC;3

в качестве результата.

Если вы установите <xsl:param name="filterid" select="6" />, вы получите

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

См. XslCompiledTransform.Transform с XsltArgumentList для справки о том, как передать параметр в Xslt с помощью.NET Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...