2017-11-10 7 views
0

Doppelte Verbindungen sollten ausgefiltert werden. Wenn die Werte von Destination und LineShortName mehrmals vorhanden sind, sollte nur das erste Auftreten angezeigt werden.Warum wird meine XSLT 1.0-Vorlage nicht jedes Mal aufgerufen?

XML-Daten:

<Stop> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>10</LineName> 
     <LineShortName>10</LineShortName> 
     <LineNumber>10</LineNumber> 
     <Destination>HAUPTBAHNHOF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T10:52:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>2/12</LineName> 
     <LineShortName>2/12</LineShortName> 
     <LineNumber>2</LineNumber> 
     <Destination>WALLERSHEIM</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T10:47:00</ScheduledDepartureTime> 
    </Connection> 
     <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>1</LineName> 
     <LineShortName>1</LineShortName> 
     <LineNumber>1</LineNumber> 
     <Destination>GOLDGRUBE</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:16:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>1</LineName> 
     <LineShortName>1</LineShortName> 
     <LineNumber>1</LineNumber> 
     <Destination>ALTSTADT</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T10:44:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>9</LineName> 
     <LineShortName>9</LineShortName> 
     <LineNumber>9</LineNumber> 
     <Destination>KO-ZENTRUM</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:24:00</ScheduledDepartureTime 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>2/12</LineName> 
     <LineShortName>2/12</LineShortName> 
     <LineNumber>2</LineNumber> 
     <Destination>WALLERSHEIM</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:17:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>8</LineName> 
     <LineShortName>8</LineShortName> 
     <LineNumber>8</LineNumber> 
     <Destination>HAUPTBAHNHOF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:25:00</ScheduledDepartureTime 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>3/13</LineName> 
     <LineShortName>3/13</LineShortName> 
     <LineNumber>3</LineNumber> 
     <Destination>HAUPTBAHNHOF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:08:00</ScheduledDepartureTime 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>1</LineName> 
     <LineShortName>1</LineShortName> 
     <LineNumber>1</LineNumber> 
     <Destination>ALTSTADT</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:14:00</ScheduledDepartureTime 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>20</LineName> 
     <LineShortName>20</LineShortName> 
     <LineNumber>20</LineNumber> 
     <Destination>HAUPTBAHNHOF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:24:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>2/12</LineName> 
     <LineShortName>2/12</LineShortName> 
     <LineNumber>2</LineNumber> 
     <Destination>NEUENDORF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:32:00</ScheduledDepartureTime> 
    </Connection> 
    <Connection> 
     <ConnectionType>ProtectedConnection</ConnectionType> 
     <LineName>10</LineName> 
     <LineShortName>10</LineShortName> 
     <LineNumber>10</LineNumber> 
     <Destination>HAUPTBAHNHOF</Destination> 
     <ConnectionState>ConnectionOK</ConnectionState> 
     <VehicleTypeRef>7</VehicleTypeRef> 
     <ScheduledDepartureTime>2017-11-07T11:22:00</ScheduledDepartureTime> 
    </Connection> 
</Stop> 

Erwartete Ausgabe (nur reiner Text):

LineShortName: 10 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T10:52:00 
LineShortName: 2/12 Destination: WALLERSHEIM ScheduledDepartureTime: 2017-11-07T10:47:00 
LineShortName: 1 Destination: GOLDGRUBE ScheduledDepartureTime: 2017-11-07T11:16:00 
LineShortName: 1 Destination: ALTSTADT ScheduledDepartureTime: 2017-11-07T10:44:00 
LineShortName: 9 Destination: KO-ZENTRUM ScheduledDepartureTime: 2017-11-07T11:24:00 
LineShortName: 8 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:25:00 
LineShortName: 3/13 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:08:00 
LineShortName: 20 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:24:00 
LineShortName: 2/12 Destination: NEUENDORF ScheduledDepartureTime: 2017-11-07T11:32:00 

Vorlage:

<xsl:key name="unique-connections" match="Connection" use="concat(Destination, '|', LineShortName)"/> 

<xsl:template match="Connection[generate-id() = generate-id(key('unique-connections', concat(Destination, '|', LineShortName)))]"> 
    <xsl:copy> 
     <xsl:text>&#xa;&#xa;</xsl:text> 
     <xsl:text>LineShortName: </xsl:text><xsl:copy-of select="LineShortName"/><xsl:text> </xsl:text> 
     <xsl:text>Destination: </xsl:text><xsl:copy-of select="Destination"/><xsl:text> </xsl:text> 
     <xsl:text>ScheduledDepartureTime: </xsl:text><xsl:copy-of select="ScheduledDepartureTime"/><xsl:text> </xsl:text> 
     <xsl:text>&#xa;</xsl:text><xsl:text>&#xa;</xsl:text> 
     <!-- 
     <xsl:for-each select="key('unique-connections', concat(Destination, '|', LineShortName))"> 
      <xsl:text>VehicleTypeRef: </xsl:text><xsl:value-of select="VehicleTypeRef"/><xsl:text>&#xa;</xsl:text> 
     </xsl:for-each> 
     --> 
    </xsl:copy> 
</xsl:template> 

Die Vorlage durch eine andere Vorlage aufgerufen wird, die es zu tun hat die Stopps:

<xsl:for-each select="Connection"> 
    <xsl:apply-templates select="current()"/> 
</xsl:for-each> 

Der tatsächliche Ausgang:

ProtectedConnection101010HAUPTBAHNHOFConnectionOK72017-11-07T10:52:00 

LineShortName: 2/12 Destination: WALLERSHEIM ScheduledDepartureTime: 2017-11-07T10:47:00 

ProtectedConnection111GOLDGRUBEConnectionOK72017-11-07T11:16:00 

LineShortName: 1 Destination: ALTSTADT ScheduledDepartureTime: 2017-11-07T10:44:00 

ProtectedConnection999KO-ZENTRUMConnectionOK72017-11-07T11:24:00ProtectedConnection2/122/122WALLERSHEIMConnectionOK72017-11-07T11:17:00 

LineShortName: 8 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:25:00 

LineShortName: 3/13 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:08:00 

ProtectedConnection111ALTSTADTConnectionOK72017-11-07T11:14:00 

LineShortName: 20 Destination: HAUPTBAHNHOF ScheduledDepartureTime: 2017-11-07T11:24:00 

LineShortName: 2/12 Destination: NEUENDORF ScheduledDepartureTime: 2017-11-07T11:32:00 

ProtectedConnection101010HAUPTBAHNHOFConnectionOK72017-11-07T11:22:00 

Ich gehe davon aus, dass die Vorlage nicht jedes Mal abgestimmt ist, aber warum? Für einige Verbindungen funktioniert es perfekt, aber jedes Mal mit diesen spezifischen Verbindungen.

Ich habe das starke Gefühl, dass es besser wäre, die Vorlage nur einmal mit dem Elternknoten der Verbindungen aufzurufen, aber ich kann meinen Kopf nicht um eine gute Lösung wickeln.

Antwort

0

Sie möchten also alle Connection Elemente mit Ihrem xsl:apply-templates verarbeiten, aber nichts für die Duplikate ausgeben. Dann nicht alle von ihnen verarbeiten, sondern verwenden <xsl:apply-templates select="Connection[generate-id() = generate-id(key('unique-connections', concat(Destination, '|', LineShortName)))]"/> oder sicherstellen, wenn Sie alle verarbeiten, dass die, die Sie nicht ausgeben etwas wollen:

<xsl:template match="Connection[not(generate-id() = generate-id(key('unique-connections', concat(Destination, '|', LineShortName))))]"/> 

Andernfalls werden die Standardvorlagen in Tritt und ausspucken alle Textdaten.

Online Probe http://xsltransform.hikmatu.com/6qM2e26 mit der leeren Vorlage für die Duplikate gibt

<Stop> 
    <Connection> 

LineShortName: <LineShortName>10</LineShortName> Destination: <Destination>HAUPTBAHNHOF</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T10:52:00</ScheduledDepartureTime> 

</Connection> 
    <Connection> 

LineShortName: <LineShortName>2/12</LineShortName> Destination: <Destination>WALLERSHEIM</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T10:47:00</ScheduledDepartureTime> 

</Connection> 
     <Connection> 

LineShortName: <LineShortName>1</LineShortName> Destination: <Destination>GOLDGRUBE</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:16:00</ScheduledDepartureTime> 

</Connection> 
    <Connection> 

LineShortName: <LineShortName>1</LineShortName> Destination: <Destination>ALTSTADT</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T10:44:00</ScheduledDepartureTime> 

</Connection> 
    <Connection> 

LineShortName: <LineShortName>9</LineShortName> Destination: <Destination>KO-ZENTRUM</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:24:00</ScheduledDepartureTime> 

</Connection> 

    <Connection> 

LineShortName: <LineShortName>8</LineShortName> Destination: <Destination>HAUPTBAHNHOF</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:25:00</ScheduledDepartureTime> 

</Connection> 
    <Connection> 

LineShortName: <LineShortName>3/13</LineShortName> Destination: <Destination>HAUPTBAHNHOF</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:08:00</ScheduledDepartureTime> 

</Connection> 

    <Connection> 

LineShortName: <LineShortName>20</LineShortName> Destination: <Destination>HAUPTBAHNHOF</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:24:00</ScheduledDepartureTime> 

</Connection> 
    <Connection> 

LineShortName: <LineShortName>2/12</LineShortName> Destination: <Destination>NEUENDORF</Destination> ScheduledDepartureTime: <ScheduledDepartureTime>2017-11-07T11:32:00</ScheduledDepartureTime> 

</Connection> 

</Stop> 

zu viele Daten für mich von Hand zu überprüfen, aber wenn der Schlüssel richtig eingerichtet ist, sehe ich nicht, wie es scheitern könnte.

+0

Ich habe beide Vorschläge getestet. - Wenn ich den Anruf ändere, bekomme ich nur die Zeilen, die am Anfang richtig waren, aber die anderen Zeilen, die nicht von der Vorlage verarbeitet wurden, fehlen noch. (Zeile 1, 3, 5, 8, 11 noch fehlt) - Wenn ich die Vorlage Übereinstimmung Zeile ändern verschiedene Zeilen fehlen und Duplikate angezeigt werden – clydester

+0

Ich habe einen Ansatz hinzugefügt und das Ergebnis, das ich bekomme, und das andere ist bei http: //xsltransform.hikmatu.com/948Fn58. –

+0

Vielen Dank. Ich löschte fast alles aus meiner XSL-Datei und bearbeitete meine XML-Eingabedatei und es scheint, dass es ein anderes Problem gibt. Wenn ich alle anderen Stopps aus der XML-Datei lösche, funktioniert es perfekt. Jetzt muss ich herausfinden, warum das Durchlaufen der Stopps und das Aufrufen der Vorlage falsch ist. – clydester

Verwandte Themen