XML Reis

https://www.mockaroo.com

Loome mock andmed andmebaasiks

siin on meile mock andmed

siin on tabeli loomine

CREATE TABLE reisid (
	id int primary key identity(1,1),
	lennujaam varchar(255),
	transport varchar(255),
	hinnad decimal,
	sihtkoht varchar(100),
	algus_kuupaev datetime,
	lopp_kuupaev datetime,
);

siin kuidas me lisame tabelis andmed

insert into reisid (lennujaam, transport, hinnad, sihtkoht, algus_kuupaev, lopp_kuupaev) values ('Puerto La Victoria Airport', 'PY-1', 19.99, 'Peru', '10/4/2024', '3/26/2025');
insert into reisid (lennujaam, transport, hinnad, sihtkoht, algus_kuupaev, lopp_kuupaev) values ('Charles B. Wheeler Downtown Airport', 'US-MO', 2.99, 'Ethiopia', '1/10/2025', '2/5/2025');
#....

siin me loome XML faili

SELECT  
    id AS '@id',
    (
        SELECT 
            transport AS '@transport',
            lennujaam AS 'text()'
        FOR XML PATH('lennujaam'), TYPE
    ),
    hinnad AS 'hinnad',
    (
        SELECT 
            sihtkoht AS 'sihtkoht',
            algus_kuupaev AS 'algus',
            lopp_kuupaev AS 'lopp'
        FOR XML PATH('info'), TYPE
    )
FROM reisid
FOR XML PATH('reis'), ROOT('reisid');

siin on XML faili viis

Praegune XML koodi näide

<reisid>
  <reis id="1">
    <lennujaam transport="PY-1">Puerto La Victoria Airport</lennujaam>
    <hinnad>20</hinnad>
    <info>
      <sihtkoht>Peru</sihtkoht>
      <algus>2024-10-04T00:00:00</algus>
      <lopp>2025-03-26T00:00:00</lopp>
    </info>
  </reis>
  <reis id="2">
    <lennujaam transport="US-MO">Charles B. Wheeler Downtown Airport</lennujaam>
    <hinnad>3</hinnad>
    <info>
      <sihtkoht>Ethiopia</sihtkoht>
      <algus>2025-01-10T00:00:00</algus>
      <lopp>2025-02-05T00:00:00</lopp>
    </info>
  </reis>
  ....
<reisid>

CSS stiilid


.suurem {
    background-color: red !important;
}

table {
    border-collapse: collapse;
    width: 100%;
}

th, td {
    border: 1px solid #999;
    padding: 6px;
    text-align: left;
}

th {
    background: #eee;
}

.highlight {
    color: red;
    font-weight: bold;
}

.third-level {
    background: yellow;
    display: inline-block;
    padding: 2px 4px;
}
/* 8.Kuva kõik xml andmed tabelina, kus read on üle rea erineva värviga.
*/
tr:nth-child(even) {
    background-color: #f2f2f2;
}

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
	<xsl:output method="xml" indent="yes"/>

	<xsl:template match="/">
		<xsl:for-each select="//reis">
			<!-- 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).-->
			<xsl:sort select="hinnad" order="ascending" data-type="number"/>
			<h1>
				<xsl:value-of select="info/sihtkoht"/>
				<!-- 1. Kuvada iga reisi sihtkoht pealkirjana, kasutades.-->
			</h1>

			<ul>
				<!-- 2. Komponendid peavad olema kuvatud täpploeteluna -->
				<li>
					<strong>Lennujaam</strong>:
					<span class="third-level">
						<xsl:value-of select="lennujaam"/>
						(<xsl:value-of select="lennujaam/@transport"/>)
					</span>
				</li>

				<li>
					<strong>Hinnad</strong>:
					<!-- Kui hind on suurem kui 10 siis värvime punaseks -->
					<xsl:if test="hinnad > 10">
						<span class="suurem">
							<xsl:value-of select="hinnad"/> €
						</span>
					</xsl:if>
					<xsl:if test="hinnad < 10">
						<span class="third-level">
							<xsl:value-of select="hinnad"/> €
						</span>
					</xsl:if>

				</li>

				<li>
					<strong>Aeg</strong>:
					<span class="third-level">
						<!-- Kolmanda taseme struktuuri andmed tuleb kuvada kollasel taustal.-->
						<xsl:value-of select="info/algus"/>—<xsl:value-of select="info/lopp"/>
					</span>
				</li>
			</ul>

			<hr/>
		</xsl:for-each>

		<!-- Hinna summa -->
		<h2>Kogu hind</h2>
		<strong>
			<xsl:value-of select="sum(reisid/reis/hinnad)"/> €
		</strong>


		<!--Filtreeri ja kuva ainult need reisid, mille sihtkoht on USA.-->
		<h2>Ainult USA sihtkohad</h2>
		<xsl:for-each select="//reis[info/sihtkoht='USA']">
			<ul>
				<li>
					<strong>Lennujaam</strong>:
					<span class="third-level">
						<xsl:value-of select="lennujaam"/>
						(<xsl:value-of select="lennujaam/@transport"/>)
					</span>
				</li>

				<li>
					<strong>Hinnad</strong>:
					<xsl:if test="hinnad > 10">
						<span class="suurem">
							<xsl:value-of select="hinnad"/> €
						</span>
					</xsl:if>
					<xsl:if test="hinnad < 10">
						<span class="third-level">
							<xsl:value-of select="hinnad"/> €
						</span>
					</xsl:if>

				</li>

				<li>
					<strong>Aeg</strong>:
					<span class="third-level">
						<xsl:value-of select="info/algus"/>—<xsl:value-of select="info/lopp"/>
					</span>
				</li>
			</ul>
		</xsl:for-each>

		<!--8. Kuva kõik xml andmed tabelina, kus read on üle rea erineva värviga.-->
		<h2>Kõik reisid tabelina</h2>
		<table>
			<thead>
				<tr>
					<th>ID</th>
					<th>Sihtkoht</th>
					<th>Lennujaam (transport)</th>
					<th>Hinnad</th>
					<th>Algus</th>
					<th>Lopp</th>
				</tr>
			</thead>
			<tbody>
				<xsl:for-each select="//reis">
					<tr>
						<td>
							<xsl:value-of select="@id"/>
						</td>
						<td>
							<xsl:value-of select="info/sihtkoht"/>
						</td>
						<td>
							<xsl:value-of select="lennujaam"/>
							(<xsl:value-of select="lennujaam/@transport"/>)
						</td>
						<td>
							<xsl:value-of select="hinnad"/> €
						</td>
						<td>
							<xsl:value-of select="info/algus"/>
						</td>
						<td>
							<xsl:value-of select="info/lopp"/>
						</td>
					</tr>
				</xsl:for-each>
			</tbody>
		</table>


	</xsl:template>
</xsl:stylesheet>

Page (ASPX file)

<%@ Page Title="Reisid" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="WebApplication3.About" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <asp:Xml ID="Xml1" runat="server" 
                 DocumentSource="reisidXml.xml" 
                 TransformSource="reisid.xslt">
        </asp:Xml>
</asp:Content>

XML Skeem

Skeemi loomiseks me peame avama XML faili ja klõpsama “Create Schema” nuppi ( Esiteks tuleb programm peatada )

Pärast seda me näeme XML skeem

<?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:simpleContent>
										<xs:extension base="xs:string">
											<xs:attribute name="transport" type="xs:string" use="required" />
										</xs:extension>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>
							<xs:element name="hinnad" type="xs:unsignedShort" />
							<xs:element name="info">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="sihtkoht" type="xs:string" />
										<xs:element name="algus" type="xs:dateTime" />
										<xs:element name="lopp" type="xs:dateTime" />
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="id" type="xs:unsignedByte" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

Tulemus