-1

XSLT に以下のループがあり、入力 XML からfor-eachの個別の値の連結文字列が得られますCUST_PO_NUMBER

<xsl:key name="custpo"
         match="LIST_G_DELV/G_DELV/LIST_G_INV_LINES/G_INV_LINES"
         use="CUST_PO_NUMBER"/>
<xsl:template match="XXFIN_GBL_RAINV_PRINT">
    <xsl:apply-templates select="LIST_G_INV"/>
</xsl:template>
<xsl:template match="LIST_G_INV">
    <xsl:for-each select="G_INV">
        <xsl:value-of select="CUSTOMER_TRX_ID"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="substring(LIST_G_SEB/G_SEB/SEB_NAME,1,255)"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="substring(IDM_BILL_TO_CUSTOMER_NAME,1,255)"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="BILL_TO_CUSTOMER_NUMBER"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="TRX_NUMBER"/>
        <xsl:text>|</xsl:text>
        <xsl:for-each select="LIST_G_DELV/G_DELV/LIST_G_INV_LINES/G_INV_LINES[generate-id()=generate-id(key('custpo',CUST_PO_NUMBER)[1])]">
            <xsl:value-of select="CUST_PO_NUMBER"/>
            <xsl:if test="not(position() = last())">
                <xsl:text>;</xsl:text>
            </xsl:if>
        </xsl:for-each>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="CUST_ISO_LANGUAGE"/>
    </xsl:for-each>
</xsl:template>

この XSLT の最終的な出力は CSV ファイルです (パイプ | で区切られます)。CUST_PO_NUMBER 要素の for-each ループの結果を 1000 文字に切り詰めることはできますか?

4

1 に答える 1

0

以下を置き換えると、これが機能するはずですfor-each

<xsl:for-each select="LIST_G_DELV/G_DELV/LIST_G_INV_LINES/G_INV_LINES[generate-id()=generate-id(key('custpo',CUST_PO_NUMBER)[1])]">
        <xsl:value-of select="CUST_PO_NUMBER"/>
        <xsl:if test="not(position() = last())">
            <xsl:text>;</xsl:text>
        </xsl:if>
</xsl:for-each>

と:

 <xsl:variable name="values">
    <xsl:for-each select="LIST_G_DELV/G_DELV/LIST_G_INV_LINES/G_INV_LINES[generate-id()=generate-id(key('custpo',CUST_PO_NUMBER)[1])]">
        <xsl:value-of select="CUST_PO_NUMBER"/>
        <xsl:if test="not(position() = last())">
            <xsl:text>;</xsl:text>
        </xsl:if>
    </xsl:for-each>
 </xsl:variable>
 <xsl:value-of select="substring($values, 1, 1000)" />

substring()とにかくを使用するので、これを行うことでifandを削除できますtext

 <xsl:variable name="values">
    <xsl:for-each select="LIST_G_DELV/G_DELV/LIST_G_INV_LINES/G_INV_LINES[generate-id()=generate-id(key('custpo',CUST_PO_NUMBER)[1])]">
        <xsl:value-of select="concat(';', CUST_PO_NUMBER)"/>
    </xsl:for-each>
 </xsl:variable>
 <xsl:value-of select="substring($values, 2, 1001)" />
于 2013-01-23T12:18:29.710 に答える