Data2type GmbH XML este simplu cu XML Simple

(Fragment din „Perl & XML” de Erik T. Ray și Jason McIntosh)

gmbh

Există oameni care cred că XML este invenția unei minți bolnave, probabil cu scopul exterminării umanității. Uneori poți înțelege. Marcajul încorporat cu caracterele mai mici și mai mari și barele oblice nu este tocmai o ușurare pentru ochi. Dacă adăugăm cuibărirea elementelor, tipurile de noduri și DTD-urile (care au fost atât de plăcut de simple în comparație cu schema XML), atunci ne-ar plăcea timpul fișierelor CSV (Valori separate prin virgulă, o linie este un set de date, individul Coloanele sunt marcate cu un separator fix) și își plâng parserul, funcția split.

Vă vom spune un secret: scrierea programelor pentru procesarea XML nu este atât de dificilă. Un întreg caz plin de instrumente este gata să aibă grijă de nenumăratele detalii enervante ale analizatorului și crearea unei structuri de date, cu API-uri simple care pot fi înțelese în câteva minute. Dacă într-adevăr aveți nevoie de complexitatea unei aplicații XML și de toate garniturile, atunci o puteți avea, dar nu trebuie. Lucrul cu XML poate fi la fel de simplu pe cât de profund, în funcție de aplicație. Există, de asemenea, instrumente simple pentru sarcini simple.

Pentru a demonstra acest lucru, să vedem un modul foarte simplu numit XML: Simple de Grant McLean. Cu o pregătire minimă, puteți obține un succes surprinzător de mare în procesarea XML.

Un program tipic citește un document XML, schimbă ceva și scrie rezultatul înapoi într-un fișier. XML: Simple este creat pentru exact acest proces. Un singur apel funcțional citește un document XML și îl stochează în memoria principală sub formă de tabele hash imbricate. Elementele și datele sunt reprezentate de tabelele hash. După ce ați făcut modificările dorite, apelați o altă funcție și scrieți rezultatul într-un fișier.

Să încercăm. Ca și în cazul fiecărui modul, trebuie mai întâi să încărcăm XML: Simple în programul nostru cu ajutorul utilizării:

Cu apelul, XML: Simple ne-a definit următoarele două funcții:

Această funcție citește un document XML dintr-un fișier sau un șir și construiește o structură de date care conține datele și elementele documentului XML. Rezultatul funcției este această structură de date sub forma unei referințe hash.

Primește o referință hash cu un document codat și o convertește în marcaj XML corect. Rezultatul funcției este un șir de text cu documentul XML convertit.

Desigur, dacă doriți, puteți construi documentul de la zero prin simpla construire a structurilor de date corespunzătoare „cu mâna” cu ajutorul hashurilor, matricilor și șirurilor. Dacă z. De exemplu, dacă un fișier este creat pentru prima dată, acest lucru poate fi chiar necesar. Aceasta nu este o problemă, ar trebui evitate doar referințele circulare. În caz contrar, modulul nu va funcționa corect.

De exemplu, să presupunem că șeful nostru dorește să trimită e-mailuri unui grup de oameni. În acest scop, el ar putea folosi SpamChucker de la WarbleSoft, o aplicație bine cunoscută pentru gestionarea listelor de discuții. SpamChucker are, printre altele, capacitatea de a importa sau exporta fișiere XML care conțin liste de adrese de e-mail. Un șef are cereri speciale, iar acesta este și cazul nostru: Numele clienților trebuie să fie scrise cu majuscule. Este nevoie de un program care citește un fișier XML, convertește numele în majuscule și apoi salvează din nou fișierul modificat.

Acceptăm provocarea și ne uităm mai întâi la fișierul XML pentru a înțelege structura acestuia. În exemplul următor vedem o astfel de listă de corespondență.

Exemplu: document XML cu lista de corespondență SpamChucker

După o scurtă privire asupra documentației XML: Simple (perldoc XML: Simple) ne simțim capabili să scriem scriptul prezentat în exemplul de mai jos:

Exemplu: Script pentru convertirea numelor clienților în litere mari

Dacă rulăm acest program (un pic nesăbuit, deoarece ieșirea de date este de fapt responsabilitatea șefului nostru), obținem această ieșire:

Felicitări! Ați scris primul dvs. program pentru a procesa date XML și merge foarte bine. Ei bine, aproape excelent. Rezultatul este puțin diferit decât era de așteptat. Pe de o parte, ordinea elementelor este modificată deoarece matricile hash nu primesc ordinea tastelor inserate. În plus, indentările dintre elementele individuale s-ar fi putut pierde. Poate fi asta o problemă?

Am ajuns la un punct interesant care ne va ține ocupați. Simplitatea și completitudinea sunt obiective contradictorii. Ca dezvoltator, trebuie să decideți singur ce părți ale marcajului trebuie să fie exacte și care nu. Uneori ordinea elementelor va fi importantă, caz în care XML: Simple nu poate fi utilizat. Este posibil ca instrucțiunile de control (IP sau instrucțiuni de procesare) să fie păstrate, din nou, un caz în care XML: Simple este exclus. Deci, trebuie să știți exact ce module sunt utilizate și ce pot și nu pot face. Atenție, decizia cu privire la instrumente trebuie luată înainte de programare. În cazul nostru, desigur, am încercat fișierul modificat cu SpamChucker, totul a decurs excelent și șeful a fost fericit. Documentul generat este suficient de aproape de original pentru a îndeplini cerințele cererii.

Unul este înclinat să spună că modificările pe care le-am făcut sunt a echivalent semantic Document, dar acest lucru nu este în totalitate adevărat. Ordinea elementelor este în general importantă în XML. Suntem doar norocoși să avem o aplicație generoasă și un utilizator final la fel de generos în acest caz, ale cărui cerințe relativ scăzute sunt îndeplinite.

Gândește-te la tine ca la o persoană care poate gestiona XML și Perl!

Desigur, suntem doar la începutul călătoriei noastre. Cea mai mare parte a cărții se află în fața noastră, plină de sfaturi și tehnici care vă vor ajuta cu XML. Nu toate sarcinile legate de XML sunt la fel de simple ca cea pe care tocmai am arătat-o. Dar nimic nu este atât de complex sau dificil încât Hammer Perl nu ar fi suficient pentru a forja cu acesta XML-ul de fier.