en_USet

XML Reis

  • Loome SQL Serveris tabeli
create table reis (
	id int primary key identity(1,1),
	lennujaama_riigikood char(2) unique,
	lennujaam_nimi varchar (50),
	lennujaamnumber char(6) unique,
	lennu_saabumisriik varchar(50),
	lennu_valjumislinn varchar(50),
	valjumisaeg Datetime,
	lennu_kestus decimal(4,2),
	transport varchar (50),
	hinnad decimal(10,2)
);
  • Teisendas SQL-tabeli XML-failiks
SELECT lennu_kestus AS '@lennukestus',
    transport AS '@transport',
    hinnad AS '@hind',
    (
        SELECT 
            lennujaam_nimi AS '@nimi',
            lennujaamnumber AS '@number',
            lennujaama_riigikood AS '@riigikood',
            (
                SELECT 
                    valjumisaeg AS '@valjumisaeg',
                    lennu_valjumislinn AS '@valjumislinn',
                    lennu_saabumisriik AS '@saabumisriik'
                FOR XML PATH('aeg'), TYPE
            )
        FOR XML PATH('lennujaam'), TYPE
    )
FROM reis FOR XML PATH('reis'), ROOT('reisid');
  • Avatakse Visual Studio ja luuakse uus projekt.
  • Paremklõpsuga projektil Add -> New item loome XML-faili ja XSLT-faili
  • SQL Serveris genereeritud xml-koodi lisame reis.xml-faili.
<reisid>
	<reis lennukestus="3.00" transport="Ford" hind="29.99">
		<lennujaam nimi="Syracuse Hancock International Airport" number="AF1768" riigikood="US">
			<aeg valjumisaeg="1900-01-01T07:00:00" valjumislinn="Paris" saabumisriik="Austria" />
		</lennujaam>
	</reis>
	<reis lennukestus="15.00" transport="Subaru" hind="149.99">
		<lennujaam nimi="Persian Gulf International Airport" number="UA5107" riigikood="IR">
			<aeg valjumisaeg="1900-01-01T09:00:00" valjumislinn="Los Angeles" saabumisriik="Netherlands" />
		</lennujaam>
	</reis>
	<reis lennukestus="4.00" transport="Toyota" hind="6.99">
		<lennujaam nimi="Fakfak Airport" number="BA6344" riigikood="ID">
			<aeg valjumisaeg="1900-01-01T09:15:00" valjumislinn="London" saabumisriik="France" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Hyundai" hind="2.99">
		<lennujaam nimi="Miramar Airport" number="SK9472" riigikood="AR">
			<aeg valjumisaeg="1900-01-01T20:30:00" valjumislinn="Copenhagen" saabumisriik="France" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Mercedes-Benz" hind="24.99">
		<lennujaam nimi="Semporna Airport" number="NH3030" riigikood="MY">
			<aeg valjumisaeg="1900-01-01T11:00:00" valjumislinn="Tokyo" saabumisriik="South Korea" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Plymouth" hind="8.99">
		<lennujaam nimi="Silver Creek Airport" number="ET6816" riigikood="BZ">
			<aeg valjumisaeg="1900-01-01T18:45:00" valjumislinn="Addis Ababa" saabumisriik="Qatar" />
		</lennujaam>
	</reis>
	<reis lennukestus="5.00" transport="Volkswagen" hind="9.99">
		<lennujaam nimi="San Matías Airport" number="NZ6359" riigikood="BO">
			<aeg valjumisaeg="1900-01-01T20:15:00" valjumislinn="Auckland" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="19.00" transport="Toyota" hind="9.99">
		<lennujaam nimi="Kaduna Airport" number="AV1619" riigikood="NG">
			<aeg valjumisaeg="1900-01-01T10:30:00" valjumislinn="Bogotá" saabumisriik="China" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Mercury" hind="2.49">
		<lennujaam nimi="Lelystad Airport" number="DL1701" riigikood="NL">
			<aeg valjumisaeg="1900-01-01T15:00:00" valjumislinn="New York" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Mercury" hind="4.99">
		<lennujaam nimi="Mário de Almeida Franco Airport" number="DL8642" riigikood="BR">
			<aeg valjumisaeg="1900-01-01T13:15:00" valjumislinn="New York" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="5.00" transport="Chevrolet" hind="19.99">
		<lennujaam nimi="Nipa Airport" number="NZ5489" riigikood="PG">
			<aeg valjumisaeg="1900-01-01T17:15:00" valjumislinn="Auckland" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Saturn" hind="3.29">
		<lennujaam nimi="Colón Airport" number="AZ4341" riigikood="CU">
			<aeg valjumisaeg="1900-01-01T20:15:00" valjumislinn="Rome" saabumisriik="Germany" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Mercedes-Benz" hind="2.49">
		<lennujaam nimi="Burevestnik Airport" number="QF1046" riigikood="RU">
			<aeg valjumisaeg="1900-01-01T17:15:00" valjumislinn="Sydney" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Jeep" hind="5.99">
		<lennujaam nimi="Dhanbad Airport" number="QF1039" riigikood="IN">
			<aeg valjumisaeg="1900-01-01T11:45:00" valjumislinn="Sydney" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Aston Martin" hind="2.79">
		<lennujaam nimi="Trondheim Airport Værnes" number="SK2136" riigikood="NO">
			<aeg valjumisaeg="1900-01-01T06:30:00" valjumislinn="Copenhagen" saabumisriik="France" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Mazda" hind="1.99">
		<lennujaam nimi="Córdoba Airport" number="LA5423" riigikood="ES">
			<aeg valjumisaeg="1900-01-01T21:30:00" valjumislinn="São Paulo" saabumisriik="Argentina" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Jeep" hind="4.49">
		<lennujaam nimi="South Bimini Airport" number="SA2730" riigikood="BS">
			<aeg valjumisaeg="1900-01-01T06:00:00" valjumislinn="Johannesburg" saabumisriik="France" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Toyota" hind="5.49">
		<lennujaam nimi="Koulamoutou Mabimbi Airport" number="KL5305" riigikood="GA">
			<aeg valjumisaeg="1900-01-01T14:15:00" valjumislinn="Amsterdam" saabumisriik="France" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Volkswagen" hind="34.99">
		<lennujaam nimi="Cibao International Airport" number="AA5870" riigikood="DO">
			<aeg valjumisaeg="1900-01-01T08:45:00" valjumislinn="New York" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Chevrolet" hind="2.99">
		<lennujaam nimi="Vredendal Airport" number="QF5738" riigikood="ZA">
			<aeg valjumisaeg="1900-01-01T16:30:00" valjumislinn="Sydney" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="10.00" transport="Dodge" hind="29.99">
		<lennujaam nimi="Raiatea Airport" number="NZ4282" riigikood="PF">
			<aeg valjumisaeg="1900-01-01T10:30:00" valjumislinn="Auckland" saabumisriik="China" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Nissan" hind="3.29">
		<lennujaam nimi="Tibooburra Airport" number="AA4152" riigikood="AU">
			<aeg valjumisaeg="1900-01-01T11:30:00" valjumislinn="New York" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Acura" hind="69.99">
		<lennujaam nimi="Bonnyville Airport" number="AI9950" riigikood="CA">
			<aeg valjumisaeg="1900-01-01T19:15:00" valjumislinn="Delhi" saabumisriik="India" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Infiniti" hind="24.99">
		<lennujaam nimi="Kharkhorin Airport" number="AV3749" riigikood="MN">
			<aeg valjumisaeg="1900-01-01T11:15:00" valjumislinn="Bogotá" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Chevrolet" hind="4.79">
		<lennujaam nimi="Aksu Airport" number="AF7015" riigikood="CN">
			<aeg valjumisaeg="1900-01-01T09:00:00" valjumislinn="Paris" saabumisriik="Germany" />
		</lennujaam>
	</reis>
	<reis lennukestus="5.00" transport="Chevrolet" hind="99.99">
		<lennujaam nimi="Scarlett Martinez International Airport" number="NZ2540" riigikood="PA">
			<aeg valjumisaeg="1900-01-01T10:15:00" valjumislinn="Auckland" saabumisriik="Australia" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Suzuki" hind="14.99">
		<lennujaam nimi="Enfidha - Hammamet International Airport" number="UA8290" riigikood="TN">
			<aeg valjumisaeg="1900-01-01T16:45:00" valjumislinn="Los Angeles" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="GMC" hind="4.19">
		<lennujaam nimi="Toulouse-Blagnac Airport" number="AV9554" riigikood="FR">
			<aeg valjumisaeg="1900-01-01T09:15:00" valjumislinn="Bogotá" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Volkswagen" hind="39.99">
		<lennujaam nimi="Kalymnos Airport" number="AI1679" riigikood="GR">
			<aeg valjumisaeg="1900-01-01T21:30:00" valjumislinn="Delhi" saabumisriik="India" />
		</lennujaam>
	</reis>
	<reis lennukestus="17.00" transport="Mercury" hind="19.99">
		<lennujaam nimi="Tivat Airport" number="LA8013" riigikood="ME">
			<aeg valjumisaeg="1900-01-01T10:45:00" valjumislinn="São Paulo" saabumisriik="Singapore" />
		</lennujaam>
	</reis>
	<reis lennukestus="3.00" transport="Hyundai" hind="15.99">
		<lennujaam nimi="Rawalakot Airport" number="AC1668" riigikood="PK">
			<aeg valjumisaeg="1900-01-01T10:45:00" valjumislinn="Toronto" saabumisriik="USA" />
		</lennujaam>
	</reis>
	<reis lennukestus="1.50" transport="Chevrolet" hind="15.99">
		<lennujaam nimi="El Tajín National Airport" number="DL1375" riigikood="MX">
			<aeg valjumisaeg="1900-01-01T07:15:00" valjumislinn="New York" saabumisriik="USA" />
		</lennujaam>
	</reis>
</reisid>
  1. Kuvada iga reisi sihtkoht pealkirjana, kasutades <h1>.
<xsl:template match="/reisid">
	<xsl:for-each select="reis">
		<h1>
			<xsl:value-of select="lennujaam/aeg/@saabumisriik"></xsl:value-of>
		</h1>
	</xsl:for-each>
</xsl:template>

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

<ul>
	<li>Transport: <xsl:value-of select="@transport"/></li>
	<li>Hind: <xsl:value-of select="@hind"/></li>
	<li>Lennu kestus: <xsl:value-of select="@lennukestus"/></li>
	<li>Lennujaam nimi : <xsl:value-of select="lennujaam/@nimi"/></li>
	<li>Lennujaamnumber : <xsl:value-of select="lennujaam/@number"/></li>
	<li>Lennujaama riigikood : <xsl:value-of select="lennujaam/@riigikood"/></li>
	<li>Lennu valjumislinn : <xsl:value-of select="lennujaam/aeg/@valjumislinn"/></li>
	<li>Valjumisaeg : <xsl:value-of select="lennujaam/aeg/@valjumisaeg"/></li>
</ul>

3. Kolmanda taseme struktuuri andmed tuleb kuvada kollasel taustal.

<h1 class="yellow">
	<xsl:value-of select="lennujaam/aeg/@saabumisriik"></xsl:value-of>
</h1>
<!-- kolmas tase (aeg) -->
<li class="yellow">Lennu valjumislinn : <xsl:value-of select="lennujaam/aeg/@valjumislinn"/></li>
<li class="yellow">Valjumisaeg : <xsl:value-of select="lennujaam/aeg/@valjumisaeg"/></li>

4. Lisa oma tingimus (nt reisi hind või eriline soovitus peab olema esile tõstetud teatud tingimustel).

Ma tegin nii, et tekst muutub punaseks, kui transport on Chevrolet, ja siniseks, kui hind on üle 60.

<li>
				<xsl:attribute name="class">
					<!--&gt see on sümbol > (rohkem) -->
					<xsl:if test="@hind > 60">blue</xsl:if>
				</xsl:attribute>
				Hind: <xsl:value-of select="@hind"/>
</li>
 <li>
    <xsl:attribute name="class">
        <xsl:if test="@transport = 'Chevrolet'">red</xsl:if>
    </xsl:attribute>
    Transport: <xsl:value-of select="@transport"/>
</li>

5. Kuva iga reisi kogumaksumuse, liites transport, majutuse, ekskursioonide ja muude kulude hinnad kokku.

Lisasin reis.xml-i transpordi hind, majutus, ekskursioon, muu, et arvutada iga reisi kogumaksumus.

<reis lennukestus="3.00" transport="Ford" hind="29.99" transpordi_hind="15" majutus="50" ekskursioon="20" muu="10">
	<lennujaam nimi="Syracuse Hancock International Airport" number="AF1768" riigikood="US">
		<aeg valjumisaeg="1900-01-01T07:00:00" valjumislinn="Paris" saabumisriik="Austria"/>
	</lennujaam>
</reis>

Nüüd arvutan reis.xslt-s iga reisi kogumaksumuse

<li>
				<xsl:variable name="kokku" select="number(@hind) + number(@transpordi_hind) + number(@majutus) + number(@ekskursioon) + number(@muu)"/>
				Kogumaksumuse: 
				<xsl:value-of select="$kokku"/>
</li>

Samuti kuvan need komponendid märgistatud loendina (<ul>).

<li>Transpordi hind: <xsl:value-of select="@transpordi_hind"/></li>
<li>Majutus: <xsl:value-of select="@majutus"/></li>
<li>Ekskursioon: <xsl:value-of select="@ekskursioon"/></li>
<li>Muu: <xsl:value-of select="@muu"/></li>

6. Filtreeri ja kuva ainult need reisid, mille transport sisaldab lennureisi.

Ma seadistasin sõitude filtreerimise nii, et kuvataks ainult need, mille atribuut transport sisaldab sõna „Air”. Selleks muutsin failis reis.xml mõnede transpordivahendite väärtused „Airbus”-iks.

<reis lennukestus="15.00" transport="Airbus" hind="149.99" transpordi_hind="25" majutus="55" ekskursioon="22" muu="12">
	<lennujaam nimi="Persian Gulf International Airport" number="UA5107" riigikood="IR">
		<aeg valjumisaeg="1900-01-01T09:00:00" valjumislinn="Los Angeles" saabumisriik="Netherlands"/>
	</lennujaam>
</reis>

reis.xslt

<xsl:for-each select="reis[contains(@transport, 'Air')]">

7. Sorteeri kõik reisid vastavalt hinnangule (nt kliendihinnang, kui selline väli on olemas XML-is, kui ei ole kasuta teine numbriline väli).

<!-- Sorteerimine atribuudi lennukestus järgi, numbriline, kasvavas järjekorras -->
<xsl:for-each select="reis">
	<xsl:sort select="number(@lennukestus)" data-type="number" order="ascending"/>

8. Kuva kõik xml andmed tabelina, kus read on üle rea erineva värviga.

<table>
	<tr>
		<th>Transport</th>
		<th>Hind</th>
		<th>Transpordi hind</th>
		<th>Majutus</th>
		<th>Ekskursioon</th>
		<th>Muu</th>
		<th>Lennu kestus</th>
		<th>Lennujaam nimi</th>
		<th>Lennujaamnumber</th>
		<th>Lennujaama riigikood</th>
		<th>Lennu valjumislinn</th>
		<th>Valjumisaeg</th>
		<th>Saabumisriik</th>
		<th>Kogumaksumuse</th>
	</tr>
		<xsl:for-each select="reis">
			<xsl:sort select="number(@lennukestus)" data-type="number" order="ascending"/>
			<xsl:variable name="varv" select="(position() * 30) mod 360"/>
			<tr>
				<xsl:attribute name="style">
					<xsl:text>background-color: hsl(</xsl:text>
					<xsl:value-of select="$varv"/>
					<xsl:text>, 50%, 80%);</xsl:text>
				</xsl:attribute>
				<td><xsl:value-of select="@transport"/></td>
				<td><xsl:value-of select="@hind"/></td>
				<td><xsl:value-of select="@transpordi_hind"/></td>
				<td><xsl:value-of select="@majutus"/></td>
				<td><xsl:value-of select="@ekskursioon"/></td>
				<td><xsl:value-of select="@muu"/></td>
				<td><xsl:value-of select="@lennukestus"/></td>
				<td><xsl:value-of select="lennujaam/@nimi"/></td>
				<td><xsl:value-of select="lennujaam/@number"/></td>
				<td><xsl:value-of select="lennujaam/@riigikood"/></td>
				<td><xsl:value-of select="lennujaam/aeg/@valjumislinn"/></td>
				<td><xsl:value-of select="lennujaam/aeg/@valjumisaeg"/></td>
				<td><xsl:value-of select="lennujaam/aeg/@saabumisriik"/></td>
				<td>
					<xsl:variable name="kokku" select="number(@hind) + number(@transpordi_hind) + number(@majutus) + number(@ekskursioon) + number(@muu)"/>
					<xsl:value-of select="format-number($kokku,'0.00')"/>
				</td>
			</tr>
	</xsl:for-each>
</table>
<xsl:variable name="varv" select="(position() * 30) mod 360"/>

See rida loob muutuja $varv, mis salvestab HSL-värvi nurga iga tabeli rea jaoks, mis arvutatakse kui praeguse elemendi positsioon tsüklis , korrutatuna 30-ga ja võetuna mooduliga 360, et iga element saaks unikaalse värvi vahemikus 0–359 kraadi.

<xsl:text>background-color: hsl(</xsl:text>

CSS-omaduse background-color algus HSL-funktsiooniga.

<xsl:text>, 50%, 80%);</xsl:text>
  • 50% — värvi küllastus (saturation)
  • 80% — värvi heledus (lightness)

XML skeem

reis.xsd

<?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="aeg">
											<xs:complexType>
												<xs:attribute name="valjumisaeg" type="xs:dateTime" use="required" />
												<xs:attribute name="valjumislinn" type="xs:string" use="required" />
												<xs:attribute name="saabumisriik" type="xs:string" use="required" />
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="nimi" type="xs:string" use="required" />
									<xs:attribute name="number" type="xs:string" use="required" />
									<xs:attribute name="riigikood" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="lennukestus" type="xs:decimal" use="required" />
						<xs:attribute name="transport" type="xs:string" use="required" />
						<xs:attribute name="hind" type="xs:decimal" use="required" />
						<xs:attribute name="transpordi_hind" type="xs:unsignedByte" use="required" />
						<xs:attribute name="majutus" type="xs:unsignedByte" use="required" />
						<xs:attribute name="ekskursioon" type="xs:unsignedByte" use="required" />
						<xs:attribute name="muu" type="xs:unsignedByte" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

Lisatud XML-failile viide XSD-failile

Oma ülesanded:

  1. Näita ainult lennud, mille hind on üle 50
<xsl:for-each select="reis[@hind > 50]">

2. Näita ainult lende, kus transport sisaldab „Airbus“

<xsl:for-each select="reis[contains(@transport, 'Airbus')]">

3. Näita ainult lende, mille lennujaama number algab tähega „N”, tekst on punane.

<xsl:for-each select="reis[starts-with(lennujaam/@number, 'N')]">


<td>
				<xsl:attribute name="style">
								color: red;
				</xsl:attribute>
				<xsl:value-of select="lennujaam/@number"/>
</td>

Kõik kood