2

同じ値を持つ直後の兄弟を一緒に合成しようとしています。しかし、IMMEDIATE 兄弟だけを選択するのに苦労しています。

入力:

<ROWS>
    <ROW>
        <MONTH>1</MONTH>
        <START_DATE>15/04/2013</START_DATE>
        <RATE_AMOUNT>10</RATE_AMOUNT>
        <DISCOUNT>-2</DISCOUNT>
    </ROW>
    <ROW>
        <MONTH>2</MONTH>
        <START_DATE>15/05/2013</START_DATE>
        <RATE_AMOUNT>10</RATE_AMOUNT>
        <DISCOUNT>-2</DISCOUNT>
    </ROW>
    <ROW>
        <MONTH>3</MONTH>
        <START_DATE>15/06/2013</START_DATE>
        <RATE_AMOUNT>10</RATE_AMOUNT>
        <DISCOUNT>-5</DISCOUNT>
    </ROW>
    <ROW>
        <MONTH>4</MONTH>
        <START_DATE>15/07/2013</START_DATE>
        <RATE_AMOUNT>10</RATE_AMOUNT>
        <DISCOUNT>-2</DISCOUNT>
    </ROW>
</ROWS>

期待される出力:

<RateList>
    <Rate>
        <NoOfMonths>2</NoOfMonths>
        <StartDate>15/04/2013</StartDate>
        <RateAmount>10</RateAmount>
        <Discount>-2</Discount>
    </Rate>
    <Rate>
        <NoOfMonths>1</NoOfMonths>
        <StartDate>15/06/2013</StartDate>
        <RateAmount>10</RateAmount>
        <Discount>-5</Discount>
    </Rate>
    <Rate>
        <NoOfMonths>1</NoOfMonths>
        <StartDate>15/07/2013</StartDate>
        <RateAmount>10</RateAmount>
        <Discount>-2</Discount>
    </Rate>
</RateList>

これが私の XSL です。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <RateList>
            <xsl:apply-templates/>
        </RateList>
    </xsl:template>
    <xsl:template match="ROW">
        <xsl:variable name="noOfMonths" select=".|following-sibling::*[RATE_AMOUNT=current()/RATE_AMOUNT][DISCOUNT=current()/DISCOUNT]"/>
        <xsl:if test="not(preceding-sibling::*[RATE_AMOUNT=current()/RATE_AMOUNT][DISCOUNT=current()/DISCOUNT])"> 
            <Rate>
                <NoOfMonths>
                    <xsl:value-of select="count($noOfMonths)"/>
                </NoOfMonths>       
                <StartDate>
                    <xsl:value-of select="START_DATE"/>
                </StartDate>
                <RateAmount>
                    <xsl:value-of select="RATE_AMOUNT"/>
                </RateAmount>
                <Discount>
                    <xsl:value-of select="DISCOUNT"/>
                </Discount>
            </Rate>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

そして、これは私が得ている出力です:

<RateList>
    <Rate>
        <NoOfMonths>3</NoOfMonths>
        <StartDate>15/04/2013</StartDate>
        <RateAmount>10</RateAmount>
        <Discount>-2</Discount>
    </Rate>
    <Rate>
        <NoOfMonths>1</NoOfMonths>
        <StartDate>15/06/2013</StartDate>
        <RateAmount>10</RateAmount>
        <Discount>-5</Discount>
    </Rate>
</RateList>

誰か助けてくれませんか?直系の兄弟のみを選択/カウントするにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

-1

直系の兄弟とは、すぐ上と下の兄弟のことです。この場合、position() 関数を使用して制限できます。私はこれを自分で学び始めたばかりですが、次のようなものかもしれません

following-sibling::*[1] 

preceding-sibling::*[1]
于 2013-05-13T05:18:44.257 に答える