Sunteți pe pagina 1din 4

Parsare, afișare și formatarea elementelor

XML
"Nu cred in nimic, dar iau in considerare totul."
Vintea Alexandru

Obiective:  parsare XML;


 afisare continutul elementelor XML in tag-uri HTML
 formatarea elemntelor folosind CSS;
Folosti Mozila Firefox

1. Notiuni teoretice.

XML este un meta-limbaj pentru marcarea structurală a documentelor și este


fundamental în manipularea datelor semistructurate specifice Internet-ului. Datele
semistructurate se mai numesc şi date autodescriptive, ele putând fi descompuse şi analizate
fără referire la o schemă externă deoarece conţin şi informațiile de descriere a datelor.
Metoda principală de descriere a acestor tipuri de date este limbajul XML, care
permite fie definirea de etichete proprii ce corespund atributelor, fie se poate utiliza o definiţie
existentă de tip de document (DTD-Data Type Definition) care precizează atributele şi o
gramatică de utilizare a acestora.
Elementele constructive ale limbajului sunt etichete ierarhizate. Fiecare element are o
secvenţă de perechi atribut-valoare şi o secvenţă de subelemente. Aceste subelemente pot fi,
la rândul lor, marcate sau pot fi simple segmente de date de tip text.
Un document XML este considerat valid dacă satisface o gramatică, definită fie prin
DTD sau XMLSchema. XML realizează o marcare a datelor conform semnificației acestora.
Un marcaj identifică conţinutul datelor, specificand tipul de date și nu modul lor de
prezentare.
Principalul rol al limbajului XML este de a structura, salva și a transmite informații.
Următorul exemplu este un mesaj de la Alice la Bob codificat XML
<mesaj><to>Alice</to><from>Bob</from><heading>Question</heading><bo
dy>Don't forget me this weekend!</body></mesaj>
1.1 Marcaje. Din punct de vedere sintactic, un document XML este format dintr-o
colecţie de elemente. În general, un element este un text cuprins între doua marcaje balansate.
Sintaxa generală a unui marcaj este:
<nume_marcaj>Un text</nume_marcaj>
1.2 Elemente. Un element XML este un container format din marcaj de start, din
conţinut propriu-zis care poate fi format din caractere şi/sau din subelemente XML şi din
marcaj de final. Un element XML poate, la rândul lui, conţine sub-elemente XML.
1.3 Atribute. Elementele sunt descrise prin atributele atașate acestora. Atributele sunt
perechi (nume, valoare) unice. Pentru ca un document XML să fie acceptat din punct de
vedere sintactic, el trebuie să fie bine format (well-formed). Un document este bine format
dacă marcajele sunt balansate și dacă atributele sunt unice și au valorile reprezentate ca șiruri
de caractere încadrate de ghilimele.
Următorul exemplu ilustrează utilizarea atributelor (limba şi tip) pentru
descrierea elementului marcat cu tag-ul <nume>. De asemenea, prima linie reprezintă o
declaraţie xml care nu este obligatorie, dar care se recomandă a fi utilizată.
<?xml version=”1.0” ?>
<lucrare>

1
<nume limba=”romana” tip=”short_paper”>Tehnologii Internet</nume>
<autor>Munteanu Marian</autor>
</lucrare>
Prin marcarea cu tag-uri a unui document, acesta este divizat în părți semantice. Un
exemplu ar fi împărțirea unui text în capitole și secțiuni. Existența distincției dintre diferite
părți ale unui document permite clasificarea sau gruparea acestora, urmată de tratarea lor
diferențiată. În XML o astfel de clasificare începe prin impunerea restricției ca un document
valid să fie compus dintr-un singur element, numit rădăcină, dar acel element poate conţine
alte elemente, astfel încât se poate crea o structură ierarhică a documentului.
Deci, un document XML conţine un set de informaţii organizat într-o structură
arborescentă. Aceasta are un element rădăcină şi orice alt element are un unic părinte.
Structura arborescentă corespunzătoare documentului precedent este reprezentată în figura
următoare.

1.4 Referințe. Într-un element se pot specifica referinţe la alte elemente. Structura
unui document XML care conţine elemente cu referinţe la alte elemente este o structură de tip
graf. Pentru un element se poate preciza un identificator unic (ca valoarea a atributului id)
care permite specificarea de referinţe (ca valori ale atributului idref) la elementul respectiv.
Fie următorul document XML:
<?xml version="1.0" ?>
<facultatea id=”ti”>
<fnume>Tehnologia Informatiei</fnume>
<fadr>IASI</fadr>
</facultatea>
<lucrare>
<nume limba=”romana” tip=”short_paper”>Introducere XML</nume>
<autor>Munteanu MArian</autor>
<sfacultate idref=”ti”>
<!-- Marcaj special, care introduce o referinta la alt element -->
</lucrare>
In urmatorul exemplu vom citi elemntele unui fisier XML si le vom afisa continutul
fiecarui element folosindu-ne de tag-uri HTML!

Fisier: data.xml
<?xml version="1.0"?>
<pag1>
<titlu1>Tehnologii Internet</titlu1>
<titlu2>Laborator</titlu2>
<titlu3>Nr. 7</titlu3>
<titlu4>Sala Ap 21</titlu4>
<titlu5>Sudentul ......</titlu5>

2
</pag1>

In fisierul data.html ne vom folosi de JavaScript pentru a citi si afisa continutul


elementelor din fisierul data.xml.
Primul pas creem un obiect ca instanta a clasei XMLHttpRequest() pentru IE7+,
Firefox, Opera, Chrome si Safari sau ca instanta a clasei
ActiveXObject("Microsoft.XMLHTTP") pentru IE6 si IE5.
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest()
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP")
}
xhttp.open("GET","data.xml",false); // citirea fisierului XML
xhttp.send("");
xmlDoc=xhttp.responseXML ;
In urmatorul exemplu continutul fiecarui element XML este introdus intr-un tag
html folosind JavaScript.
document.getElementById("titlu1").innerHTML=
xmlDoc.getElementsByTagName("titlu1")[0].childNodes[0].nodeValue;
//introducem in tag cu id titlu1 continutul elementului titlu1 din xml;

document.getElementById("titlu2").innerHTML=
xmlDoc.getElementsByTagName("titlu2")[0].childNodes[0].nodeValue;
document.getElementById("titlu2").innerHTML=
xmlDoc.getElementsByTagName("titlu2")[0].childNodes[0].nodeValue;
document.getElementById("titlu3").innerHTML=
xmlDoc.getElementsByTagName("titlu3")[0].childNodes[0].nodeValue;
document.getElementById("titlu4").innerHTML=
xmlDoc.getElementsByTagName("titlu4")[0].childNodes[0].nodeValue;
document.getElementById("titlu5").innerHTML=
xmlDoc.getElementsByTagName("titlu4")[0].childNodes[0].nodeValue;

Fisier: date.html
<html>
<head>
<title> titlu </title>
</head>
<body>
<span id="titlu1"></span><br>
<span id="titlu2"></span><br>
<span id="titlu3"></span><br>
<span id="titlu4"></span><br>
<span id="titlu5"></span><br>
<br>
<script type="text/javascript">
if (window.XMLHttpRequest)
{ xhttp=new XMLHttpRequest() }
else
{ xhttp=new ActiveXObject("Microsoft.XMLHTTP") }
xhttp.open("GET","data.xml",false);
xhttp.send("");
xmlDoc=xhttp.responseXML;

document.getElementById("titlu1").innerHTML=
xmlDoc.getElementsByTagName("titlu1")[0].childNodes[0].nodeValue;

3
document.getElementById("titlu2").innerHTML=
xmlDoc.getElementsByTagName("titlu2")[0].childNodes[0].nodeValue;
document.getElementById("titlu2").innerHTML=
xmlDoc.getElementsByTagName("titlu2")[0].childNodes[0].nodeValue;
document.getElementById("titlu3").innerHTML=
xmlDoc.getElementsByTagName("titlu3")[0].childNodes[0].nodeValue;
document.getElementById("titlu4").innerHTML=
xmlDoc.getElementsByTagName("titlu4")[0].childNodes[0].nodeValue;
document.getElementById("titlu5").innerHTML=
xmlDoc.getElementsByTagName("titlu4")[0].childNodes[0].nodeValue;
</script>
</body>
</html>

In functie de necesitatea fiecaruia se poate folosi orice tip de tag in html. De exemplu,
daca dorim, putem sa introducem continutul elementelor XML intr-un “div” cu id-ul
corespunzator, iar acel div il putem configura intr-un CSS date.css:
#titlu1 {
font-family: Script;
font-weight: italic;
font-size: 30px;
color: red;
margin-left: 70px;
}

2. Task-uri.
Creati si atasati fisierul pentru formatarea datelor.

3. Bibliografie

 S. Buraga, Tehnologii XML, Polirom, Iaşi, 2006


 http://magazinlinux.blogspot.ro/2013/04/introducere-in-xml.html
 http://magazinlinux.blogspot.ro/2013/04/introducere-in-xml.html