Active Server Pages,ActiveServerPages+,ASP,ASP+,aspx,VBScript,IIS,internet,intranet,programming,programowanie,XML,Extensible Markup Language,kurs,opis,HTML,Hypertext Markup Language,JScript,JavaScript,wyszukiwarka,znajdz,instrukcja,Stelmik,Stelmi,free,darmo,zadarmo,free,serwer,server,www,konta,PHP,perl,klient,uslugi,asp,sklep internetowy,sklepy internetowe,e-sklep,esklep,tworzenie stron internetowych,strony internetowe,strony www,tworzenie stron www,strony internetowe,web page,webpage,creating,Krzysztof Stelmach,Krzysztof,Stelmach,www.stelmach.info,www.asp.z.pl
 
Create your own social network!
IP: 18.205.109.152 
 
 ASP / UŻYCIE XML
Szukaj:  
Pon, 06.07.2020r.
KURSY » języki - serwer » ASP » Użycie XML
 

1. Odczytanie dokumentu XML

XML, eXtensible Markup Language, jest odmianą języka, która w porównaniu do HTML nie posiada ograniczeń pod względem definiowania znaczników. W HTML znaczniki są na sztywno określone. Można określić własne znaczniki i stworzyć dokument, który służyłby do ściśle określonych celów. Do tej pory powstało wiele standardów, które bazują na XML, np:

- CDF, Chanel Definiton Format,
- SMIL, Synchronized Multimedia Integration Language,
- OFX, Open Financial Exchange,
- OSD, Open Software Description Format.

Oto przykład dokumentu XML:

1:
2:
3:
<?xml version="1.0"?>
<notatnik wlasciciel="Autor">
<wydarzenie>
4:
5:
<opis>Dzień urodzenia Moniki</opis>
<data>
6:
7:
8:
<dzien>17</dzien>
<miesiac>03</miesiac>
<rok>1974</rok>
9: </data>
10:
11:
</wydarzenie>
<wydarzenie>
12:
13:
<opis>Dzień urodzin mamy</opis>
<data>
14:
15:
16:
<dzien>2</dzien>
<miesiac>08</miesiac>
<rok>1958</rok>
17: </data>
18:
19:
</wydarzenie>
<wydarzenie>
20:
21:
<opis>Dzień Matki</opis>
<data>
22:
23:
24:
<dzien>26</dzien>
<miesiac>05</miesiac>
<rok>2000</rok>
25: </data>
26:
27:
</wydarzenie>
</notatnik>

Jak widać XML wyglądem jest zbliżony do HTML, posiada znaczniki otwierające i zamykające elementy oraz niektóre znaczniki posiadają atrybuty. Jedyną chyba różnicą jest to, że nazwy znaczników są tworzone przez samego autora tego dokumentu. Poniżej znajduje się opis przykładu.
Linia pierwsza:

<?xml version="1.0"?>

informuje przeglądarkę, że standardem bieżącego dokumentu jest XML 1.0, który w momencie pisania tego opisu był najbardziej rozpowszechnionym standardem XML. Podstawowym elementem dokumentu XML w powyższym przykładzie jest notatnik, który musi składać się ze znacznika początku i końca. Dokument bez tego podstawowego elementu, zwanego także węzłem podstawowym, jest niepoprawny. Posiada on także atrybut:

<notatnik wlasciciel="Autor">

Nazwa atrybutu to wlasciciel, jego wartość określa nazwę właściciela umieszczonych w dokumencie informacji. Oba elementy uzupełniają słownictwo tego dokumentu. Chociaż XML posiada inne rodzaje elementów (np. komentarze, instrukcje, itp.), tylko te dwie są niezbędne do tworzenia struktury dokumentu.
Element podstawowy, notatnik, zawiera w sobie inne elementy, elementy potomne (podrzędne). W przykładzie są nimi wydarzenie, które zawiera opis wydarzenia wewnątrz znacznika opis oraz informację o dniu, miesiącu i roku danego wydarzenia, które zawarte są w elementach potomnych w stosunku do data.
Podczas tworzenia elementów w XML należy uważać, aby nie zamknąć elementu nadrzędnego przed zamknięciem elementu potomnego.

Przedstawienie danych zawartych w dokumencie XML odbywa się poprzez interfejs DOM (Document Object Model). DOM jest potężnym interfejsem programistycznym, który może być użyty zarówno po stronie klienckiej jak i po stronie serwera. Poniższy przykład pokazuje jak można przetworzyć zawartość wcześniej zaprezentowanego dokumentu XML po stronie serwera używając ASP oraz DOM i wyświetlić go po stronie klienckiej w oknie przeglądarki w postaci zwykłego dokumentu HTML.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Prezentacja zawartości pliku XML</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
Dim XMLDoc, rootNode, wydarzenie, element, i, strDataWydarzenia
Set XMLDoc = Server.CreateObject("Microsoft.XMLDOM")
XMLDoc.Async = False
XMLDoc.Load(Server.MapPath("notatnik.xml"))
Set rootNode = XMLDoc.documentElement
Response.Write "<H1>Notatnik, własność: "
Response.Write rootNode.attributes.getNamedItem("wlasciciel").text & "</H1>" & VbCrLf
16: If rootNode.hasChildNodes() Then
17:
18:
For Each wydarzenie In rootNode.childNodes
For Each element In wydarzenie.childNodes
19: If element.nodeName = "opis" Then
20: Response.Write "<B>" & element.Text & "</B><BR>"
21: ElseIf element.nodeName = "data" Then
22:
23:
strDataWydarzenia = ""
For i = 0 To element.childNodes.length - 1
24: strDataWydarzenia = strDataWydarzenia & element.childNodes(i).Text & "/"
25:
26:
Next
strDataWydarzenia = Left(strDataWydarzenia, Len(strDataWydarzenia) - 1) & "<BR>" & VbCrLf
27: Response.Write strDataWydarzenia
28: End If
29:
30:
Next
Next
31:
32:
33:
34:
End If
%>
</BODY>
</HTML>

Interfejs DOM jest dostępny poprzez obiekt Microsoft.XMLDOM, co ma miejsce w linii 10. Właściwość Async, która jest użyta w celu załadowania dokumentu XML, nie jest niezbędna w przypadku serwera, ale nie zaszkodzi, a nawet pomoże nie zapomnieć o jej ustawieniu w przypadku tworzenia XML po stronie klienckiej. W linii 12 metoda MapPath posiada parametr "notatnik.xml". Jest to nazwa pliku XML zawierająca wcześniej zaprezentowany przykładowy dokument XML. Pierwszy element w dokumencie XML, element podstawowy (najwyższego rzędu) jest pobierany poprzez instrukcję:

Set rootNode = XMLDoc.documentElement

W przykładowym pliku XML jest to element notatnik, który posiada atrybut nazwany wlasciciel i jego zawartość jest znajduje się w

rootNode.attributes.getNamedItem("wlasciciel").Text

Przed użyciem pętli pobierającej zawartość wszystkich elementów potomnych dla elementu notatnik użyta została instrukcja warunkowa If sprawdzająca obecność takich elementów w dokumencie (linia 16). Dopiero po sprawdzeniu warunku następuje wykonanie pętli For ... Each pobierającej wszystkie elementy potomne względem elementu notatnik (linia 17). Kolejna pętla (linia 18), również For ... Each, dotyczy pobrania elementów podrzędnych w stosunku do elementu wydarzenie. Wewnątrz pętli znajduje się warunek sprawdzający nazwę elementu podrzędnego. Odbywa się to poprzez wykorzystanie właściwości nodeName:

If element.nodeName = "name" Then
...
ElseIf element.nodeName = "data" Then
...
End If

Zawartość elementów dokumentu XML znajduje się we właściwości Text danego elementu. Taka prezentacja zawartości dokumentu XML jest chyba najszybszą metodą. Innym sposobem jest wykorzystanie dokumentu XSL (eXtensible Stylesheet Language), który umożliwia twórcy opis wyglądu poszczególnych elementów na stronie WWW.

2. Wykorzystanie XSL

XSL może być użyty w celu przekształcenia dokumentu XML na dokument HTML. XSL nie tylko umożliwia definiowanie wyglądu, ale także selekcję, dokonywanie operacji oraz sortowanie danych. XSL definiuje szablon końcowy oraz określa w jaki sposób elementy źródłowe mają być przekształcone i w jaki sposób umieszczone w dokumencie HTML. Poniżej przedstawiony został przykładowy dokument XSL.

1:
2:
<?xml version="1.0" encoding="ISO-8859-2"?>
<HTML xmlns:xsl="http://www.w3c.org/TR/WD-xsl">
3: <BODY STYLE="font-family: Tahoma, Verdana, Arial; font-size: 12pt; background-color: #FFFFFF">
4: <DIV STYLE="font-weight: bold; font-size: 16pt">
5: Notatnik, własność: <xsl:value-of select="@wlasciciel"/>
6:
7:
</DIV>
<xsl:for-each select="wydarzenie" order-by="+ opis">
8: <DIV STYLE="background-color: #44AAFF; color: #000000; padding: 2px">
9: <SPAN STYLE="font-weight: bold; color: weight"><xsl:value-of select="opis"/></SPAN>
10: </DIV>
11: <xsl:for-each select="data">
12:
13:
<DIV STYLE="font-weight: bold">
<SPAN STYLE="font-weight: bold">Data:
14: <xsl:value-of select="dzien"/>/<xsl:value-of select="miesiac"/>/<xsl:value-of select="rok"/></SPAN>
15:
16:
17:
</DIV>
</xsl:for-each>
</xsl:for-each>
18: </BODY>
19: </HTML>

Podstawowy (nadrzędny) element dokumentu XML jest właściwie dostępny od samego początku, a jego atrybut jest umieszczony w linii 5:

<xsl:value-of select="@wlasciciel"/>

Wartość atrybutu jest dostępna, ponieważ jego nazwa została poprzedzona znakiem @, który odróżnia nazwy atrybutów od nazw elementów. Nazwy elementów nie są poprzedzane żadnym znakiem. Należy zauważyć, że ten znacznik nie posiada znacznika końca elementu XSL. Jest to związane z tym, że każdy element XSL można zamknąć poprzez umieszczenie znaku / przed symbolem zamknięcia znacznika, tak jak jest to zrobione w linii 5.
Przemieszczanie się po wydarzeniach (elementach potomnych w stosunku do elementu podstawowego) jest zrealizowane poprzez użycie:

<xsl:for-each select="wydarzenie" order-by="+ opis">
</xsl:for-each>

Ciekawym elementem tej instrukcji jest to, że istnieje możliwość (i jest to zrobione) dokonania sortowania po elementach opis. Sortowanie jest rosnące, o czym świadczy znak "+" przed nazwą elementu. Umieszczenie znaku "-" spowodowałoby sortowanie malejące. Wewnętrzny element xsl:for-each (linie 11-16) dokumentu XSL wykonuje się w przypadku elementu podrzędnego w stosunku do elementu wydarzenia jakim jest data. Pozostałe znaczniki są identyczne jak w przypadku dokumentu HTML i nie będą omawiane w tej części.

Teraz kiedy stworzony został dokument XML oraz dokument XSL należałoby wykorzystać je w celu prezentacji zawartości pliku XML używając ASP. Oto przykład skryptu ASP:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Przykład połączenia XML i XSL</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
Dim XMLDoc, XSLDoc
Set XMLDoc = Server.CreateObject("Microsoft.XMLDOM")
Set XSLDoc = Server.CreateObject("Microsoft.XMLDOM")
XML.Async = False
XMLDoc.Load(Server.MapPath("notatnik.xml"))
XSLDoc.Async = False
XSLDoc.Load(Server.MapPath("notatnik.xsl"))
Response.Write(XMLDoc.documentElement.transformNode(XSLDoc.documentElement))
17:
18:
19:
%>
</BODY>
</HTML>

W liniach 10 i 11 zostały utworzone dwa obiekty XML DOM. Pierwszy ładuje notatnik, zaś drugi opis wyglądu dokumentu końcowego. Użycie opisu wyglądu z dokumentu XSL na danych zawartych w pliku XML odbywa się poprzez wywołanie metody:

XMLDoc.documentElement.transformNode(XSLDoc.documentElement)

3. Tworzenie dokumentu XML

Istnieje możliwość stworzenia dokumentu XML poprzez wykorzystanie DOM oraz ASP. Oto przykład pokazujący w jaki sposób się to realizuje. Poniższy skrypt tworzy dokument XML zawierający tylko jeden element wydarzenie wraz z opisem i datą.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
<%
Set XMLDoc = Server.CreateObject("Microsoft.XMLDOM")

' stworzenie elementu podstawowego i dołączenie go do dokumentu XML
Set notatnik = XMLDoc.CreateElement("notatnik")
Set atrWlasciciel = XMLDoc.CreateAttribute("wlasciciel")
atrWlascicial.Text = "Autor"
wydarzenie.attributes.setNamedItem(atrWlasciciel)
Set XMLDoc.documentElement = notatnik

' dodanie wydarzenia
Set wydarzenie = XMLDoc.CreateElement("wydarzenie")
notatnik.AppendChild(wydarzenie)
Set opis = XMLDoc.CreateElement("opis")
opis.Text = "Dzień urodzin Moniki"
wydarzenie.AppendChild(opis)

' dodanie daty wydarzenia
Set data = XMLDoc.CreateElement("data")
wydarzenie.AppendChild(data)
Set dzien = XMLDoc.CreateElement("dzien")
dzien.Text = "17"
data.AppendChild(dzien)
Set miesiac = XMLDoc.CreateElement("miesiac")
miesiac.Text = "03"
data.AppendChild(miesiac)
Set rok = XMLDoc.CreateElement("rok")
rok.Text = "1974"
data.AppendChild(rok)

' wysłanie dokumentu do przeglądarki
Response.Write "<?xml version=""1.0""?>"
Response.Write notatnik.xml
%>

Pierwszym krokiem, jest oczywiście stworzenie obiektu XML DOM, który automatycznie stworzy dokument, ale nie stworzy elementu podstawowego - należy zrobić to samemu (linia 4). Następnie zapis:

Set atrWlasciciel = XMLDoc.CreateAttribute("wlasciciel")
atrWlascicial.Text = "Autor"
wydarzenie.attributes.setNamedItem(atrWlasciciel)

tworzy atrybut dla elementu podstawowego i nadaje mu wartość "Autor". Element podstawowy jest dopiero dołączony do dokumentu XML w linii 8. Właściwość documentElement przechowuje element podstawowy. Pozostała część skryptu tworzy elementy wydarzenia i odpowiednio je podporządkowuje. Na uwagę zasługuje metoda AppendChild(), która umożliwia dodanie do dowolnego elementu jego podelementu, czyli elementu podrzędnego:

element.AppendChild(podelement)

Tak utworzony cały dokument XML zostaje przekazany do klienta (przeglądarki) poprzez użycie komend:

Response.Write "<?xml version=""1.0""?>"
Response.Write notatnik.xml

które informują przeglądarkę o wersji dokumentu XML oraz wysyłają cały stworzony dokument XML. Stworzony dokument nie jest jeszcze tym co chciałoby się zaprezentować klientowi (użytkownikowi). Teraz należałoby stworzyć dokument HTML działający po stronie klienta.

1:
2:
3:
4:
5:
6:
7:
8:
9:
<HTML>
<HEAD>
<TITLE>Połączenie XML i XSL w IE 5.0 - wykonywane po stronie klienta (przeglądarki)</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<XML ID="XMLDoc"></XML>
<XML ID="XSLDoc"></XML>
<DIV ID="sformatowanyHTML"></DIV>
<SCRIPT LANGUAGE = VBScript>
10:
11:
12:
13:
14:
XMLDoc.Async = False
XMLDoc.Load("notatnik.asp")
XSLDoc.Async = False
XSLDoc.Load("notatnik.xsl")
result = XMLDoc.documentElement.transformNode(XSLDoc.documentElement)
15: sformatowanyHTML.innerHTML = result
16:
17:
18:
</SCRIPT>
</BODY>
</HTML>

Wygląd jest bardzo podobny do przykładu (skryptu ASP) wykonywanego po stronie serwera. Przykładowe obiekty XML DOM dla plików XML i XSL są zdefiniowane w liniach 7 i 8 oraz znacznik DIV, który będzie przechowywał przekształcony dokument XML. W części skryptu ładowane są oba dokumenty XML oraz XSL, a następnie dokonuje się przekształcenie dokumentu XML, w taki sposób, jaki został opisany w XSL. Jedyną różnicą w porównaniu do skryptu wykonującego się po stronie serwera jest to, że rezultat zostanie zapisany wewnątrz znacznika DIV (instrukcja innerHTML).

 
do góry ^ 
Jesteś 2623721 odwiedzającym
 
 
Copyright © 2003-2020 Krzysztof Stelmach, Wszelkie prawa zastrzeżone.
 
System reklamy Test