Also, ich habe diese XML-Datei (unten) und ich versuche, eine Liste von Reservations
pro Customer
zu machen. Da Kunden "innerhalb" Reservations
sind und nicht eindeutig sind (mehrere Kunden können unterschiedliche Reservierungen vornehmen), hatte ich ein Problem: Ich kann die richtige Menge von Reservations
pro Customer
abrufen, aber sie erscheinen die Anzahl der Male, die der Kunde in der existiert Datei, weil ich gehe alle Reservations
jedes Mal werfen ...For-Each-Schleife ohne wiederholte Knoten in XSL-Datei
Können Sie, bitte, mir dabei helfen? Ich muss nicht an die HTML-Datei Customers
senden, die bereits verarbeitet wurde.
Meine XML-Datei:
<?xml version="1.0" encoding="UTF-8" ?>
<System xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Users/ASUS/Documents/lprog-xml/Reservations.xsd">
<Reservations>
<Reservation id="b1">
<CourierToken>abb456fb</CourierToken>
<CustomerToken>fsdg432n</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>12</day>
<month>12</month>
<year>2016</year>
</Calendar>
</BeginDate>
<Term>20</Term>
<DropPoint id="f33"/>
<Customer>
<Username>pms</Username>
<Password>sdasda</Password>
<FirstName>Pedro</FirstName>
<LastName>Pinto</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="a2">
<CourierToken>dfsd43b2</CourierToken>
<CustomerToken>f3hu32mu</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>13</day>
<month>January</month>
<year>2017</year>
</Calendar>
</BeginDate>
<Term>5</Term>
<DropPoint id="f33"/>
<Customer>
<Username>xss</Username>
<Password>asdq</Password>
<FirstName>Xavier</FirstName>
<LastName>Silva</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="a342">
<CourierToken>d4fd43b2</CourierToken>
<CustomerToken>f3htg2mu</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>10</day>
<month>March</month>
<year>2016</year>
</Calendar>
</BeginDate>
<Term>45</Term>
<DropPoint id="f33"/>
<Customer>
<Username>xss</Username>
<Password>asdq</Password>
<FirstName>Xavier</FirstName>
<LastName>Silva</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="b3">
<CourierToken>desfg236</CourierToken>
<CustomerToken>43jmfh23</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>1</day>
<month>January</month>
<year>2017</year>
</Calendar>
</BeginDate>
<Term>8</Term>
<DropPoint id="g34"/>
<Customer>
<Username>dal</Username>
<Password>dasdg</Password>
<FirstName>Daniel</FirstName>
<LastName>Almeida</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="a56">
<CourierToken>5bh4fdsf</CourierToken>
<CustomerToken>onfdsn43</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>23</day>
<month>9</month>
<year>2018</year>
</Calendar>
</BeginDate>
<Term>15</Term>
<DropPoint id="f33"/>
<Customer>
<Username>pops</Username>
<Password>iHack</Password>
<FirstName>Migas</FirstName>
<LastName>what</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="t345">
<CourierToken>432njdas</CourierToken>
<CustomerToken>efg234jn</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>25</day>
<month>11</month>
<year>2567</year>
</Calendar>
</BeginDate>
<Term>56</Term>
<DropPoint id="f33"/>
<Customer>
<Username>SenorJobs</Username>
<Password>gr8b8m8ir88/8</Password>
<FirstName>Steve</FirstName>
<LastName>Jobs</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="p45">
<CourierToken>acw4tsca</CourierToken>
<CustomerToken>ascfdv32</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>19</day>
<month>5</month>
<year>2020</year>
</Calendar>
</BeginDate>
<Term>7</Term>
<DropPoint id="f33"/>
<Customer>
<Username>SenorGates</Username>
<Password>VivaLaMicrosoft</Password>
<FirstName>Billy</FirstName>
<LastName>Gator</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="df45">
<CourierToken>34rfdf3d</CourierToken>
<CustomerToken>554fgdvv</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>21</day>
<month>10</month>
<year>2020</year>
</Calendar>
</BeginDate>
<Term>20</Term>
<DropPoint id="f33"/>
<Customer>
<Username>CristianoPenaldo</Username>
<Password>saudadesIrina</Password>
<FirstName>Cristiano</FirstName>
<LastName>Ronaldo</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="po454">
<CourierToken>dfsg345d</CourierToken>
<CustomerToken>sadfg345</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>31</day>
<month>2</month>
<year>2345</year>
</Calendar>
</BeginDate>
<Term>23</Term>
<DropPoint id="f33"/>
<Customer>
<Username>ZLATAN</Username>
<Password>iAmZlatan</Password>
<FirstName>Zlatan</FirstName>
<LastName>Ibrahimovic</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
<Reservation id="sd34">
<CourierToken>34567asd</CourierToken>
<CustomerToken>dssfdgh4</CustomerToken>
<BeginDate>
<Calendar type="Gregorian">
<day>10</day>
<month>10</month>
<year>2030</year>
</Calendar>
</BeginDate>
<Term>4</Term>
<DropPoint id="f33"/>
<Customer>
<Username>PashaBiceps</Username>
<Password>maFriend</Password>
<FirstName>Pasha</FirstName>
<LastName>Biceps</LastName>
<Email>[email protected]</Email>
</Customer>
</Reservation>
</Reservations>
<DropPoints>
<DropPoint id="f33">
<Designation>Quinta das Freiras</Designation>
<State>Free</State>
<Location>
<Street>Rio Tinto</Street>
<ZipCode>4435-074</ZipCode>
<Country>Portugal</Country>
<Coordinates>
<Longitude>32</Longitude>
<Latitude>52</Latitude>
</Coordinates>
</Location>
</DropPoint>
<DropPoint id="g34">
<Designation>Norte Shopping</Designation>
<State>Free</State>
<Location>
<Street>Porto</Street>
<ZipCode>4488</ZipCode>
<Country>Portugal</Country>
<Coordinates>
<Longitude>24</Longitude>
<Latitude>12</Latitude>
</Coordinates>
</Location>
</DropPoint>
</DropPoints>
</System>
Meine XSL-Datei:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Customers</h2>
<hr></hr><hr></hr>
<!-- select="System/Reservations/Reservation/Customer" -->
<xsl:for-each select="System/Reservations/Reservation/Customer">
<xsl:variable name="customerEmail" select="Email"/>
<h4><b>Name: </b> <xsl:value-of select="FirstName"/> <xsl:value-of select="LastName"/> </h4>
<h4><b>E-mail: </b> <xsl:value-of select="Email"/> </h4>
<!-- Creates a table with information about reservations, for each client -->
<table border="1">
<tr bgcolor="#9acd32">
<th>Reservation ID</th>
<th>Date</th>
<th>Duration (days)</th>
<th>Customer Token</th>
</tr>
<xsl:for-each select="../../Reservation">
<xsl:variable name="customerEmailCurrentReservation" select="Customer/Email"/>
<!-- processes reservations for that customer only -->
<xsl:if test="$customerEmail=$customerEmailCurrentReservation">
<tr>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="BeginDate/Calendar/day"/>-<xsl:value-of select="BeginDate/Calendar/month"/>-<xsl:value-of select="BeginDate/Calendar/year"/></td>
<td><xsl:value-of select="Term"/></td>
<td><xsl:value-of select="CustomerToken"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table> <!-- End of the table for that customer -->
<br></br><hr></hr><br></br>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Dies ist, was ich (in der HTML-transformierten Datei) erhalten:
Und das ist, was ich erhalten möchten:
Vielen Dank im Voraus!
Dies ist ein * Gruppierung * Problem - siehe: http: //www.jenitennison. com/xslt/grouping/muenchian.html und zahlreiche Beispiele der Münchischen Gruppierung hier auf SO. –
@ michael.hor257k Vielen Dank, ich habe tatsächlich versucht, das zu verwenden, aber ich habe ein paar Probleme ... Wenn ich einen Schlüssel vor der ersten für jede Schleife definieren, wie dies ' ', es heißt, dass das XSL nicht gültig ist ... irgendwelche Hilfe? Danke, ich bin neu bei XSL ... –
Sie sollten Sie versuchen, geschrieben haben, damit wir es beheben können, anstatt alles von Grund auf neu zu schreiben. Und nein - die Schlüsseldefinition, die Sie zeigen, führt ** nicht ** zu einem Fehler. –