Многоуровневый уровень XML в плоский XML с использованием XSLT - PullRequest
0 голосов
/ 02 апреля 2012

Я новый XSLT, может ли кто-нибудь предложить точный код XSLT после преобразования ::: Много иерархический XML-файл ниже ::

<ROOT>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two A</TAG2>
        <TAG2> Two B</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four A</TAG4>
        <TAG4> Four B</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two A</TAG2>
        <TAG2> Two B</TAG2>
        <TAG2> Two C</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four A</TAG4>
        <TAG4> Four B</TAG4>
        <TAG4> Four C</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
</ROOT>

Я хочу преобразовать вышеизложенное в следующее:

<ROOT>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two A</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four A</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>      
        <TAG2> Two B</TAG2>
        <TAG3> Three</TAG3>     
        <TAG4> Four B</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two A</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four A</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two B</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four B</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two C</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four C</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
    <RECORD>
        <TAG1> One </TAG1>
        <TAG2> Two</TAG2>
        <TAG3> Three</TAG3>
        <TAG4> Four</TAG4>
        <TAG5> Five </TAG5>
    </RECORD>
</ROOT>

Может ли какой-либо орган предложить код XSLT для этого? Спасибо.

1 Ответ

0 голосов
/ 02 апреля 2012

В этом случае именованный шаблон (функция) является обязательным.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:template name="addRecord">
        <xsl:param name="rank" select="1" />
        <xsl:param name="numberOfRecords" />
        <xsl:if test="$rank &lt;= $numberOfRecords">
            <RECORD>
                <xsl:copy-of select="TAG1" />
                <xsl:copy-of select="TAG2[$rank]" />
                <xsl:copy-of select="TAG3" />
                <xsl:copy-of select="TAG4[$rank]" />
                <xsl:copy-of select="TAG5" />
            </RECORD>
            <xsl:call-template name="addRecord">
                <xsl:with-param name="rank" select="$rank + 1" />
                <xsl:with-param name="numberOfRecords" select="$numberOfRecords" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    <xsl:template match="ROOT">
        <xsl:copy>
            <xsl:apply-templates select="RECORD" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="RECORD">
        <xsl:call-template name="addRecord">
            <xsl:with-param name="numberOfRecords">
                <xsl:choose>
                    <xsl:when test="count(TAG2) &gt; count(TAG4)">
                        <xsl:value-of select="count(TAG2)" />
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="count(TAG4)" />                   
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...