Ich kann normalerweise eine Antwort auf die Frage finden, die ich stelle, aber diese hat mich wirklich überkommen. Ich habe ein XSLT- und ein Input-XML-Dokument, wo ich eine Datetime von übergeordneten Elementen ziehen muss, die sich alle gegenseitig nachahmen. Wie ich dies formatiert habe, funktioniert es 80% der Zeit, aber die anderen 20% der Zeit es vermasselt und sendet die falsche Zeit aufgrund mehrerer derselben Status für die gleiche Einheit verwendet wird. ALL-Feld ist variabel, aber der Gerätestatus ist festgelegt. (Siehe XSLT).XSLT Auswählen bestimmter untergeordneter Elemente aus mehreren wiederkehrenden doppelten Headern
Problem: Die spätere Zeit überschreibt den früheren Zeitpunkt, wenn die Datei übermittelt wird.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ApparatusEvents>
<xsl:for-each select="/ICADLINK_EVENT/UN_HI_LIST/UN_HI">
<xsl:if test="UNIT_STATUS = 'DP' and DGROUP = 'SNR'">
<ApparatusEvent>
<Apparatus>
<xsl:value-of select="UNID"/>
</Apparatus>
<Type>Dispatch</Type>
<DateTime>
<xsl:value-of select="CDTS_TIMESTAMP/CDTS_DATETIME"/>
</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</xsl:if>
</xsl:for-each>
</ApparatusEvents>
<ApparatusEvents>
<xsl:for-each select="/ICADLINK_EVENT/UN_HI_LIST/UN_HI">
<xsl:if test="UNIT_STATUS = 'ER' and DGROUP = 'SNR'">
<ApparatusEvent>
<Apparatus>
<xsl:value-of select="UNID"/>
</Apparatus>
<Type>Enroute</Type>
<DateTime>
<xsl:value-of select="CDTS_TIMESTAMP/CDTS_DATETIME"/>
</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</xsl:if>
</xsl:for-each>
</ApparatusEvents>
<ApparatusEvents>
<xsl:for-each select="/ICADLINK_EVENT/UN_HI_LIST/UN_HI">
<xsl:if test="UNIT_STATUS = 'AR' and DGROUP = 'SNR'">
<ApparatusEvent>
<Apparatus>
<xsl:value-of select="UNID"/>
</Apparatus>
<Type>Arrived</Type>
<DateTime>
<xsl:value-of select="CDTS_TIMESTAMP/CDTS_DATETIME"/>
</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</xsl:if>
</xsl:for-each>
</ApparatusEvents>
</soap:Body>
</soap:Envelope>
</xsl:template>
EDIT Eingabedatei:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ICADLINK_EVENT version="1.0" creationdate="3/29/2016 8:34:57 AM">
<UN_HI_LIST>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:12:54</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:12:54</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E7</UNID>
<UNIT_STATUS>DP</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:13:54</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:13:54</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E7</UNID>
<UNIT_STATUS>ER</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:15:05</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:15:05</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E607</UNID>
<UNIT_STATUS>DP</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:15:05</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:15:05</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E607</UNID>
<UNIT_STATUS>ER</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:20:39</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:20:39</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E607</UNID>
<UNIT_STATUS>AR</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:21:19</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:21:19</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E7</UNID>
<UNIT_STATUS>AR</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
<UN_HI>
<CDTS_TIMESTAMP>
<CDTS_DATE>3/29/2016</CDTS_DATE>
<CDTS_TIME>08:21:46</CDTS_TIME>
<CDTS_DATETIME>3/29/2016 08:21:46</CDTS_DATETIME>
</CDTS_TIMESTAMP>
<UNID>E607</UNID>
<UNIT_STATUS>AR</UNIT_STATUS>
<DGROUP>SNR</DGROUP>
</UN_HI>
Stromausgang: (Es sendet angekommenen Knoten für zweimal Einheit E607, in welchem Fall sie in der überschreibt DB und und nimmt die letzte Zeit, weil es die neueste aktualisierte Datei ist.)
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ApparatusEvents>
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Dispatch</Type>
<DateTime>3/29/2016 08:12:54</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Dispatch</Type>
<DateTime>3/29/2016 08:15:05</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents>
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Enroute</Type>
<DateTime>3/29/2016 08:13:54</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Enroute</Type>
<DateTime>3/29/2016 08:15:05</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Arrived</Type>
<DateTime>**3/29/2016 08:20:39**</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Arrived</Type>
<DateTime>3/29/2016 08:21:19</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Arrived</Type>
<DateTime>**3/29/2016 08:21:46**</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
</soap:Body>
gewünschte Ausgabe: (Ich muß es nur den früheren oder späteren Zeitpunkt für mehrere Status für das gleiche Gerät greifen)
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ApparatusEvents>
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Dispatch</Type>
<DateTime>3/29/2016 08:12:54</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Dispatch</Type>
<DateTime>3/29/2016 08:15:05</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents>
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Enroute</Type>
<DateTime>3/29/2016 08:13:54</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Enroute</Type>
<DateTime>3/29/2016 08:15:05</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents>
**<ApparatusEvent>
<Apparatus>E607</Apparatus>
<Type>Arrived</Type>
<DateTime>3/29/2016 08:20:39</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>**
<ApparatusEvent>
<Apparatus>E7</Apparatus>
<Type>Arrived</Type>
<DateTime>3/29/2016 08:21:19</DateTime>
<UnitCancelledFlag>false</UnitCancelledFlag>
</ApparatusEvent>
</ApparatusEvents>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
<ApparatusEvents/>
</soap:Body>
Ich glaube nicht, dass wir das beantworten können, ohne Ihre Eingabe zu sehen. Im Allgemeinen sieht das wie ein Gruppierungsproblem aus, also fangen Sie hier an: http://www.jenitennison.com/xslt/grouping/muenchian.html –
Eingabedatei hinzugefügt, (Whoops) – Willfergy