etru_RU

XML Reis

Loo SQL Serveris andmetabeli reisi kohta.

CREATE TABLE reis(
id int primary key identity(1,1),
lennujaam varchar(50),
transport varchar(15),
lennu_kestus decimal(4),
hotell varchar(50),
lennufirma_kood char(2) unique,
lahkumise_riik varchar(50),
saabumise_riik varchar(50));

SELECT * FROM reis;

Konverteeri SQL –>XML faili.

SELECT
(
SELECT
    lennujaam AS '@nimi',
    lennufirma_kood AS '@kood',
    (
        SELECT
            hotell AS '@hotellnimi',
            transport AS 'transport',
            lennu_kestus AS 'kestus',
            hind
        FOR XML PATH('hotel'), TYPE
    ),
    (
        SELECT
            lahkumise_riik AS 'lahkumine',
            saabumise_riik AS 'saabumine'
        FOR XML PATH('riigid'), TYPE
    )
FOR XML PATH('lennujaam'), TYPE
)
FROM reis FOR XML PATH('reis'), ROOT('reisid');

Loome projekti Visual Studio jaoks ja lisame Reis.xml xml-faili.
Seejärel lisame koodi ReisParing.xslt jaoks.

Visual Studio

ReisParing.xslt

Kuvada iga reisi sihtkoht pealkirjana, kasutades <h1>.

<h1>
				<xsl:value-of select="lennujaam/riigid/saabumine"/>
				(<xsl:value-of select="lennujaam/@kood"/>)
</h1>

Komponendid peavad olema kuvatud täpploeteluna (<ul>).

<ul>
				<li>
					Transport: <xsl:value-of select="lennujaam/hotel/transport"/>
				</li>
				<li>
					Hotellnimi: <xsl:value-of select="lennujaam/hotel/@hotellnimi"/>
				</li>
				<li>
					Tarnid: <xsl:value-of select="lennujaam/hotel/@tarnid"/>
				</li>
				<li>
					Lennu hind: <xsl:value-of select="lennujaam/hotel/lennu_hind"/>
				</li>
				<li>
					Hotelli hind: <xsl:value-of select="lennujaam/hotel/hotelli_hind"/>
				</li>
				<li>
					Muud kulud: <xsl:value-of select="lennujaam/hotel/muud_kulud"/>
				</li>
				<li>
					Lahkumine riik:<xsl:value-of select="lennujaam/riigid/lahkumine"/>
				</li>
				<li>
					Saabumine riik:<xsl:value-of select="lennujaam/riigid/saabumine"/>
				</li>
</ul>

Kollase taustaga väljad

<li>
				<span class="yellow">
					Lennu hind: <xsl:value-of select="lennujaam/hotel/lennu_hind"/>
				</span>
</li>
<li>
				<span class="yellow">
					Hotelli hind: <xsl:value-of select="lennujaam/hotel/hotelli_hind"/>
				</span>
</li>
<li>
				<span class="yellow">
					Muud kulud: <xsl:value-of select="lennujaam/hotel/muud_kulud"/>
				</span>
</li>

Lisa oma tingimus (nt reisi hind või eriline soovitus peab olema esile tõstetud teatud tingimustel). Iga reis, mille kogumaksumus ületab 3000, on punane.

<xsl:choose>
				<xsl:when test="$kokku > 3000">
					<span class="kallis">
						Koguhind: <xsl:value-of select="format-number($kokku,'0.00')"/>
					</span>
				</xsl:when>
				<xsl:otherwise>
					Koguhind: <xsl:value-of select="format-number($kokku,'0.00')"/>
				</xsl:otherwise>
</xsl:choose>

Kogumaksumus

<xsl:variable name="lendu" select="number(lennujaam/hotel/lennu_hind)"/>
<xsl:variable name="hotell" select="number(lennujaam/hotel/hotelli_hind)"/>
<xsl:variable name="muu" select="number(lennujaam/hotel/muud_kulud)"/>
<xsl:variable name="kokku" select="$lendu + $hotell + $muu"/>

<xsl:choose>
				<xsl:when test="$kokku > 3000">
					<span class="kallis">
						Koguhind: <xsl:value-of select="format-number($kokku,'0.00')"/>
					</span>
				</xsl:when>
				<xsl:otherwise>
					Koguhind: <xsl:value-of select="format-number($kokku,'0.00')"/>
				</xsl:otherwise>
</xsl:choose>

Filtreerimine lennu ja hotelli tärnide arvu järgi.

<!-- Filtreeri ja kuva ainult need reisid, mille transport sisaldab lennureisi. -->
<xsl:for-each select="reis[contains(lennujaam/hotel/transport, 'Lend')]">

				<!-- Sorteeri kõik reisid vastavalt hotelli tärnidele -->
				<xsl:sort select="number(lennujaam/hotel/@tarnid)" data-type="number" order="ascending"/>
<h2>Kõik andmed tabelina</h2>

<table>
				<tr>
					<th>Lennujaam</th>
					<th>Kood</th>
					<th>Hotell</th>
					<th>Tärnid</th>
					<th>Transport</th>
					<th>Lennu hind</th>
					<th>Hotelli hind</th>
					<th>Muud kulud</th>
					<th>Koguhind</th>
					<th>Lahkumine</th>
					<th>Saabumine</th>
				</tr>

				<xsl:for-each select="reis">

					<xsl:variable name="lendu" select="number(lennujaam/hotel/lennu_hind)"/>
					<xsl:variable name="hotell" select="number(lennujaam/hotel/hotelli_hind)"/>
					<xsl:variable name="muu" select="number(lennujaam/hotel/muud_kulud)"/>
					<xsl:variable name="kokku" select="$lendu + $hotell + $muu"/>

					<tr>
						<td>
							<xsl:value-of select="lennujaam/@nimi"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/@kood"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/hotel/@hotellnimi"/>
						</td>

						<td>
							<xsl:value-of select="lennujaam/hotel/@tarnid"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/hotel/transport"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/hotel/lennu_hind"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/hotel/hotelli_hind"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/hotel/muud_kulud"/>
						</td>

						<td>
							<xsl:value-of select="format-number($kokku,'0.00')"/>
						</td>

						<td>
							<xsl:value-of select="lennujaam/riigid/lahkumine"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam/riigid/saabumine"/>
						</td>
					</tr>
				</xsl:for-each>
</table>

XML Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="reisid">
		<xs:complexType>
			<xs:sequence>
				<xs:element maxOccurs="unbounded" name="reis">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="lennujaam">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="hotel">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="transport" type="xs:string" />
													<xs:element name="lennu_hind" type="xs:decimal" />
													<xs:element name="hotelli_hind" type="xs:decimal" />
													<xs:element name="muud_kulud" type="xs:decimal" />
													<xs:element name="koguhind" type="xs:decimal" />
												</xs:sequence>
												<xs:attribute name="hotellnimi" type="xs:string" use="required" />
												<xs:attribute name="tarnid" type="xs:unsignedByte" use="required" />
											</xs:complexType>
										</xs:element>
										<xs:element name="riigid">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="lahkumine" type="xs:string" />
													<xs:element name="saabumine" type="xs:string" />
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="nimi" type="xs:string" use="required" />
									<xs:attribute name="kood" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>