XSLT Ignorieren Sie doppelte Elemente zu

Ich habe gerade angefangen zu lernen, XSLT und habe Probleme ignorieren duplizierten Elementen.

Habe ich die Suche durch Stack-Overflow und habe gesehen, dass Leute Fragen ähnliche Fragen. Ich habe versucht, ein kleines Beispiel, um zu sehen, wo ich gelaufen war, auf meine Datei, und war in der Lage, Sie zu ignorieren duplizierten Elementen. Aber das problem bei mir scheint zu entstehen, wenn ich mehr als einen Typ eines Elements.

Beispiel:

File1.xml

<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>

<Main>
    <Records>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>B</Description>
        </Record>
        <Record>
            <Description>C</Description>
        </Record>
    </Records>
</Main>

merge2.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
    <table border="1">
        <tr>
            <th>Type</th>
            <th>Count</th>
        </tr>
        <xsl:for-each select="Main/Records/Record">
            <xsl:if test ="not(preceding-sibling::Record(Description/text() = current()/Description/text()])">
                <tr>
                    <td><xsl:value-of select="Description"/></td>
                    <td><xsl:value-of select="count(//Record[Description/text()=current()/Description/text()])"/></td>
                </tr>
            </xsl:if>
        </xsl:for-each>
    </table>
</xsl:template>
</xsl:stylesheet>

Dies funktioniert gut und gibt mir die gewünschten Ergebnisse.

Type    Count
 A        2
 B        1
 C        1

Jedoch wenn ich eine weitere hinzufügen-Datensätze-element scheint es für die beiden eine nach der anderen, z.B.

<?xml-stylesheet type="text/xsl" href="merge2.xsl"?>

<Main>
    <Records>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>B</Description>
        </Record>
        <Record>
            <Description>C</Description>
        </Record>
    </Records>
    <Records>
        <Record>
            <Description>B</Description>
        </Record>
        <Record>
            <Description>A</Description>
        </Record>
        <Record>
            <Description>C</Description>
        </Record>
        <Record>
            <Description>C</Description>
        </Record>
    </Records>
</Main>

Diese produzieren würde, die folgenden.

Type        Count
 A            3
 B            2
 C            3
 B            2
 A            3
 C            3

Wo es scheint, um Prozess der ersten Instanz von Aufzeichnungen, die dann auf den nächsten Zug. Gibt es eine Möglichkeit, es so zu machen, dass es Duplikate entfernen auf die beiden?

Ich habe versucht, die änderung der for-each Durchlaufen jede Instanz von Aufzeichnungen, und haben versucht, erstellen Sie eine separate Vorlage für Sie, aber ich immer noch, scheint etwas zu fehlen, wie ich es noch nicht geschafft haben es zum laufen zu bringen.

Vielen Dank für jede Hilfe.

InformationsquelleAutor user2795778 | 2013-09-19
Schreibe einen Kommentar