Как получить вхождение тега в XSLT с шагом приращения по его вхождению - PullRequest
1 голос
/ 07 февраля 2020

У меня есть XML, например:

<?xml version="1.0" encoding="utf-8"?>
<lines>
    <accounts>
        <account>
            <p lang="en">
                <trans> SAVINGS.</trans>
            </p>
        </account>
        <account>
            <p lang="en">
                <trans> CREDIT</trans>
            </p>
        </account>
    </accounts>
    <deposits>
        <account>
            <p lang="en">
                <trans> SAVINGS DEPOSIT.</trans>
            </p>
        </account>
        <account>
            <p lang="en">
                <trans> CREDIT DEPOSIT</trans>
            </p>
        </account>
    </deposits>
</lines>

Но я хочу напечатать, как показано ниже, в XSLT:

Account 1) SAVINGS
Account 2) CREDIT
Account 3) SAVINGS DEPOSIT
Account 4) CREDIT DEPOSIT<

какое выражение XSLT будет лучшим для этого?

Я попробовал с ниже XSLT

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="trans" >
        <xsl:if test="ancestor::account">
           Account <xsl:number value="count(account)" format="1"/>
        </xsl:if>
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

Но я получаю вывод как

Account 0 SAVINGS
Account 0 CREDIT   
Account 0 SAVINGS DEPOSIT             
Account 0 CREDIT DEPOSIT

Какое было бы лучшее выражение, чтобы разрешить это ..?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Попробуйте

<xsl:template match="account//trans">
Account <xsl:number level="any" format="1)"/> <xsl:value-of select="."/>
</xsl:template>

https://xsltfiddle.liberty-development.net/bFWRApb

0 голосов
/ 07 февраля 2020

Я бы сделал:

XSLT 1.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/lines">
    <xsl:for-each select="*/account">
        <xsl:text>Account </xsl:text>
        <xsl:number value="position()" format="1)"/>
        <xsl:value-of select="p/trans"/>        
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

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