Xml tutorial

XML - limbajul de marcare extins (eX tensible M arkup L anguage) este recomandat de W3C ca limbă pentru schimbul de informații între diferite sisteme. Acesta este un mod de stocare a informațiilor orientat pe text. Limbile moderne de schimb de date, cum ar fi XHTML, precum și cele mai multe tehnologii WebServices, se bazează pe XML.







DOM XML (Document Object Model) este un set de obiecte standardizate care oferă o interfață de tip unic pentru utilizarea XML în diferite limbi și platforme. Standardul definește numai metode, proprietăți și alte părți ale interfeței obiect, lăsând implementarea liberă pentru diferite limbi. FCL acceptă în prezent pe deplin DOM 1.0.

Articolul oferă exemple de lucru cu date XML privind principiul complexității crescânde.

Utilizare: Unicode sau Ansi

FPC furnizează module XML care utilizează codificarea ANSI. Prin urmare, ele pot diferi în funcție de platforma în care se execută codul și nu au suport Unicode. Lazarus, la rândul său, oferă un set propriu de module XML localizate în pachetul LazUtils. Ei suportă pe deplin Unicode în format UTF-8 și nu depind de codul de execuție a codului. Aceste module sunt interschimbabile, iar utilizarea lor este determinată numai de prezența în lista de utilizări.

Următoarele module FPC XML utilizează codificarea sistemului:

Aceste module sunt furnizate de Lazarus XML și au suport Unicode în format UTF-8:

  • laz2_DOM
  • laz2_XMLRead
  • laz2_XMLWrite
  • laz2_XMLCfg
  • laz2_XMLUtils
  • laz_XMLStreaming.

Nu toate sunt necesare în toate exemplele. Cu toate acestea, aveți nevoie de DOM, deoarece conține mai multe tipuri, inclusiv TXMLDocument.

Citirea unui nod de text

Rețineți că atunci când lucrați cu TXMLDocument, textul din nod este considerat un nod de text separat. Astfel, trebuie să vă referiți la valoarea de text a nodului ca nod separat. Alternativ, proprietatea TextContent poate fi utilizată pentru a returna valoarea tuturor nodurilor de mai jos care sunt asociate cu datele.

Procedura ReadXMLFile întotdeauna creează un nou document TXMLDocument. așa că nu trebuie să o creați în avans. Cu toate acestea, trebuie să apelați manual metoda gratuită după ce ați terminat lucrul cu documentul pentru a elibera resursele ocupate de obiectul TXMLDocument.

De exemplu, luați în considerare următorul fișier XML:

Următorul exemplu prezintă modurile corecte și incorecte de a obține valorile unui nod de text xml:







Derivarea numelor gazdă

O mică notă despre navigarea în arborele DOM:

Pentru accesul secvențial la noduri, este mai bine să utilizați proprietățile FirstChild și NextSibling (pentru a merge mai departe în copac) sau LastChild și PreviousSibling (înapoi de la sfârșitul arborelui). Pentru accesul aleatoriu la nodurile de copaci, puteți utiliza proprietatea ChildNodes sau metoda GetElementsByTagName. dar aceste metode creează un obiect TDOMNodeList care trebuie eliberat după utilizare. Acest comportament este diferit de alte implementări ale DOM (de exemplu, MSXML), deoarece implementarea FCL se bazează mai degrabă pe obiecte decât pe interfețe.

Următorul exemplu arată cum se afișează numele nodurilor în componenta TMemo din formular.

Următorul este un fișier XML numit "C: \ Programs \ test.xml":

Și codul de pe Pascal, care îndeplinește această sarcină:

Ca urmare, programul afișează următoarele:

Încărcarea XML în TreeView

O utilizare obișnuită a fișierului XML este parsarea și afișarea informațiilor într-un format asemănător unui arbore. Puteți găsi componenta TTreeView în fila "Common Controls" Lazarus'a.

Funcția de mai jos va lua un document XML preîncărcat dintr-un fișier sau generat programat și va umple TreeView cu conținutul său. Antetul fiecărui nod este conținutul primului atribut al acestui nod.

Schimbarea unui document XML

Primul lucru pe care trebuie să-l amintiți, TDOMDocument este mânerul DOM. Puteți obține o instanță a acestei clase prin crearea sau încărcarea unui document XML.

Pe de altă parte, nodurile nu pot fi create ca obiecte obișnuite. Trebuie să utilizați metodele pe care le oferă TDOMDocument pentru a le crea și, ulterior, să utilizați alte metode pentru a le pune în locul potrivit în arbore. Aceasta indică faptul că nodurile trebuie să aparțină unui document DOM bine definit.

Iată câteva metode comune ale TDOMDocument:

Crearea unui TXMLDocument dintr-un șir

Dacă datele XML sunt în rândul MyXmlString, puteți crea un DOM din acesta folosind următorul cod:

Verificarea autenticității documentului

Acesta este un exemplu de document XML care conține un DTD:

Acest DTD specifică faptul că elementul rădăcină trebuie să conțină unul sau mai multe elemente copil. iar elementele copilului pot conține numai date despre caractere. Dacă parserul detectează o încălcare a acestor reguli, atunci le va raporta.

Descărcarea unui astfel de document este oarecum mai complicată. Lăsați datele XML originale să fie conținute în fluxul AStream:

Caracterele spațiului alb

Dacă doriți să salvați spații albe în textul nodurilor, ar trebui să utilizați metoda de încărcare a documentului XML de mai sus. În mod implicit, spațiul albului inițial este ignorat, motiv pentru care funcția ReadXML (.) Ignoră tot spațiul alb la începutul textului nodului. Înainte de a apela Parser.Parse (Src, TheDoc), adăugați următoarea linie:

După aceea, parserul va lăsa toate caracterele spațiului alb, inclusiv toate feedurile de linii adăugate pentru a îmbunătăți lizibilitatea documentului XML!

Transmiterea în flux

Procesarea XML folosind DOM, necesită încărcarea întregului document în memorie. Acest lucru poate sau nu poate fi de dorit dacă documentul este imens. FCL oferă funcții pentru citirea unui nod de date XML la un moment dat, folosind clasa TXMLReader și descendenții săi. Clasa TXMLReader este similară cu clasa .NET XmlReader. Mai jos este un exemplu simplu de utilizare a TXmlReader:

Generarea unui fișier XML

Mai jos este codul pentru scrierea unui fișier XML. (Luat de la tutorialul din blogul DeveLazarus). Rețineți că modulele DOM și XMLWrite trebuie să fie incluse în Utilize







Articole similare

Trimiteți-le prietenilor: