Ghid de internet - toate cele mai interesante lucruri de pe Internet. Utilizarea XML în mediul Delphi Crearea xml în delphi xe din mers

Mulți programatori Delphi asociază setările de salvare cu utilizarea INI fișierele din programele dvs. Utilizarea acestei metode în proiecte mai puțin serioase ar trebui evitată, deoarece limitează flexibilitatea, ceea ce împiedică extinderea ulterioară a programului. Merită spus că această abordare este destul de populară datorită ușurinței sale de utilizare și disponibilității instrumentelor încorporate în mediul de dezvoltare.

Cu toate acestea, opțiunea ideală pentru stocarea setărilor programului este structurată XML fișiere. Avantajul lor este că este posibil ca numărul de parametri să nu fie fixat. Pentru a înțelege mai bine acest lucru, să ne uităm la un exemplu specific.

În programul USearch, când faceți clic pe o intrare, apare un meniu contextual, care afișează o listă de articole. Aceste elemente sunt comenzi, care la rândul lor sunt încărcate din fișierul de setări. Dacă setările au fost stocate în INI fișier, atunci programul ar putea salva și încărca un anumit număr de comenzi, de exemplu 10 sau 50. De îndată ce este nevoie de o valoare mai mare, codul va trebui rescris și recompilat corespunzător.


Folosind abordarea folosind XML fișiere, vom putea încărca dinamic toți parametrii secțiunii. Pe lângă toate acestea, fișierul de configurare va deveni mai elegant, fără numerotarea redundantă a parametrilor. Cu toate acestea, instrumente standard pentru a lucra XML Delphi are multe dezavantaje, așa că recomand să folosiți biblioteca standard MSXML. De obicei, este inclus în mod implicit în familia de sisteme de operare Windows.


Pentru a vă conecta MSXML, trebuie să generăm un fișier de interfață cu o listă a tuturor funcțiilor importându-l de pe serverul COM. Au fost scrise destul de multe articole detaliate despre cum să importați o interfață, dar vă sugerez să descărcați fișierul MSXML2_TLB.PAS deja gata de utilizare. După ce fișierul este descărcat, plasați-l lângă proiectul dvs. sau plasați-l în folderul lib al mediului Delphi. Astfel, toate programele create vor putea folosi modulul MSXML, trebuie doar să adăugați linia MSXML2_TLB la utilizări.

Pentru claritate, luați în considerare următorul exemplu de utilizare a acestei biblioteci:

Procedura LoadData; var XMLDoc: DOMDocument;

Rădăcină: IXMLDOMElement; începe XMLDoc:= CoDOMDocument.Create; XML XMLDoc.Load("settins.xml"); Root:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode("size/width").Text); Rădăcină:= zero; XMLDoc:= zero; Sfârşit; Mai întâi, este creată o instanță a clasei DOMDocument și apoi conținutul fișierului settings.xml este încărcat în memorie. Deoarece conform standardului orice fișierul trebuie să conțină o etichetă rădăcină (în acest caz config.

), atunci trebuie să-l obținem folosind funcția DocumentElement

. Apoi, conținutul dintre etichete este scos

, care la rândul lor sunt situate între etichete

. Astfel, din fișierul settings.xml, metoda noastră va afișa text în MessageBox

"100px"

500px

100px

Aici este folosită metoda SelectSingleNode, care ia ca parametru un șir

După ce facem clic pe butonul Create Unit, va fi creat modulul de interfață MSXML_TLB, care ne va permite să folosim obiecte XML DOM: DOMDocument, XMLDocument, XMLHTTPRequest și o serie de altele implementate în biblioteca MSXML.DLL. O referință la modulul MSXML_TLB trebuie să fie listată în lista Utilizări.

Dispozitiv XML DOM

Document Object Model reprezintă un document XML ca o structură arborescentă constând din ramuri. Interfețele de programare XML DOM permit aplicațiilor să navigheze în arborele de documente și să manipuleze ramurile acestuia. Fiecare ramură poate avea un anumit tip (DOMNodeType), în funcție de care sunt determinate ramurile părinte și fii.

În majoritatea documentelor XML veți găsi ramuri precum element, atribut și text. Atributele sunt un tip special de ramură și nu sunt ramuri copil. Atributele sunt manipulate folosind metode speciale oferite de obiectele XML DOM.

Pe lângă implementarea interfețelor recomandate de World Wide Web Consortium (W3C), Microsoft XML DOM conține metode care acceptă XSL, modele XSL, spații de nume și tipuri de date. De exemplu, metoda SelectNodes vă permite să utilizați sintaxa modelului XSL pentru a găsi ramuri într-un context specific, iar metoda TransformNode acceptă utilizarea XSL pentru a efectua transformări.

Testați documentul XML

Ca exemplu de document XML, să luăm un director de CD-ROM-uri muzicale, care are următoarea structură: Empire Burlesque Bob Dylan STATELE UNITE ALE AMERICII 10.90 1985 Columbia Ascunde-ți inima Bonnie Tylor Regatul Unit 9.90 1988 ... CBS Records Dezlănțuiește-mi inima Bob Dylan Joe Cocker 8.20 1987

EMI

Acum suntem gata să începem să ne uităm la modelul de obiect XML DOM, pe care îl vom începe cu obiectul XMLDOMDocument.

Document XML - obiect XMLDOMDocument

Pentru a controla modul în care este încărcat documentul (sincron sau asincron), utilizați proprietatea Async. În mod implicit, această proprietate este setată la True, ceea ce indică faptul că documentul este încărcat asincron și controlul este returnat aplicației înainte ca documentul să fie încărcat complet. În caz contrar, documentul este încărcat sincron, iar apoi trebuie să verificați valoarea proprietății ReadyState pentru a afla dacă documentul s-a încărcat sau nu. De asemenea, puteți crea un handler de evenimente OnReadyStateChange care va primi control atunci când valoarea proprietății ReadyState se schimbă.

Următoarele arată cum să încărcați un document XML utilizând metoda Load:

Utilizează ... MSXML_TLB ... procedura TForm1.Button1Click(Sender: TObject);

var XMLDoc: IXMLDOMDocument;

începe XMLDoc:= CoDOMDocument.Create;

XMLDoc.Async:= False;

XMLDoc.Load('C:\DATA\DATA.xml');

// // Iată codul care manipulează // documentul XML și ramurile acestuia // XMLDoc:= Nil;<>Sfârşit;

Odată ce documentul este încărcat, putem accesa proprietățile acestuia. Astfel, proprietatea NodeName va conține valoarea #document, proprietatea NodeTypeString va conține documentul cu valoare, iar proprietatea URL va conține valoarea fișier:///C:/DATA/DATA.xml.

Ca exemplu de document XML, să luăm un director de CD-ROM-uri muzicale, care are următoarea structură: Empire Burlesque Bob Dylan STATELE UNITE ALE AMERICII 10.90 1985

Gestionarea erorilor De un interes deosebit sunt proprietățile asociate procesării documentului atunci când este încărcat. Astfel, proprietatea ParseError returnează un obiect XMLDOMParseError care conține informații despre o eroare care a apărut în timpul procesării documentului.</p><p> <CD> <TITLE>Pentru a scrie un handler de erori, puteți adăuga următorul cod: <ARTIST>Var XMLError: IXMLDOMParseError;</ARTIST> <COUNTRY>Bob Dylan</COUNTRY> <COMPANY>STATELE UNITE ALE AMERICII</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>... XMLDoc.Load('C:\DATA\DATA.xml');</p><p>XMLError:= XMLDoc.ParseError;<>Dacă XMLError.ErrorCode</p><p>0 Apoi // // Aici ne ocupăm de eroare // Else Memo1.Lines.Add(XMLDoc.XML);</p> <p>După cum puteți vedea din exemplul de mai sus, informațiile returnate de obiectul XMLDOMParseError sunt destul de suficiente pentru a localiza eroarea și a înțelege motivul apariției acesteia.</p> <p>Acum să restabilim elementul de închidere <TITLE>în documentul nostru și continuăm discuția despre XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Accesarea arborelui documentelor</h2> <p>Pentru a accesa un arbore de document, puteți fie să obțineți elementul rădăcină și apoi să iterați prin ramurile sale secundare, fie să găsiți o anumită ramură. În primul caz, obținem elementul rădăcină prin proprietatea DocumentElement, care returnează un obiect de tip XMLDOMNode. Următoarele arată cum să utilizați proprietatea DocumentElement pentru a obține conținutul fiecărui element copil:</p><p>Var Nod: IXMLDOMNode;</p><p>Rădăcină: IXMLDOMElement;</p> <p>I: întreg;</p> <p>... Root:= XMLDoc.DocumentElement;</p> <p>Pentru I:= 0 la Root.ChildNodes.Length-1 face Begin Node:= Root.ChildNodes.Item[I];</p><p>Memo1.Lines.Add(Nod.Text);</p><p>Sfârşit;</p> <p>Pentru documentul nostru XML vom obține următorul text.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dacă suntem interesați de o anumită ramură sau de o ramură sub prima ramură copil, putem folosi fie metoda NodeFromID, fie metoda GetElementByTagName a obiectului XMLDOMDocument.</h2> <p>Metoda NodeFromID necesită un identificator unic definit în Schema XML sau Definiția tipului de document (DTD) și returnează o ramură cu acel identificator.</p><p>Metoda GetElementByTagName necesită specificarea unui șir cu un anumit element (etichetă) și returnează toate ramurile cu acest element. Mai jos este cum să folosiți această metodă pentru a găsi toți artiștii din directorul nostru CD-ROM:</p><p>Noduri: IXMLDOMNodeList;</p> <p>Pentru a accesa datele stocate într-o ramură, utilizați de obicei fie proprietatea NodeValue (disponibilă pentru atribute, ramuri de text, comentarii, instrucțiuni de procesare și secțiuni CDATA), proprietatea Text, care returnează conținutul text al ramurii, fie proprietatea NodeTypedValue . Acesta din urmă, însă, poate fi folosit doar pentru ramuri cu elemente tipizate.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigarea în arborele documentelor</h3> <p>Obiectul XMLDOMNode oferă multe modalități de a naviga în arborele documentului. De exemplu, pentru a accesa ramura părinte se folosește proprietatea ParentNode (tip XMLDOMNode), ramurile copil sunt accesate prin proprietățile ChildNodes (tip XMLDOMNodeList), FirstChild și LastChild (tip XMLDOMNode) etc.</p> <p>Proprietatea OwnerDocument returnează un obiect de tip XMLDOMDocument care identifică documentul XML însuși. Proprietățile enumerate mai sus vă permit să navigați cu ușurință în arborele documentului.</p><p>Acum să trecem prin toate ramurile documentului XML:</p><p>Root:= XMLDoc.DocumentElement;</p> <p>Pentru I:= 0 la Root.ChildNodes.Length-1 face Begin Node:= Root.ChildNodes.Item[I];</p><p>Dacă Node.HasChildNodes, atunci GetChilds(Node,0);</p><p>Sfârşit;</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>După cum sa menționat mai sus, SelectNodes-ul obiectului XMLDOMNode oferă o modalitate mai flexibilă de a accesa ramurile documentelor. În plus, există o metodă SelectSingleNode care returnează doar prima ramură a documentului. Ambele metode vă permit să specificați șabloane XSL pentru a căuta ramuri.</h3> <p>Să parcurgem procesul de utilizare a metodei SelectNodes pentru a prelua toate ramurile care au o ramură CD și o subramură PRICE:</p> <p>Root:= XMLDoc.DocumentElement; Noduri:= Root.SelectNodes('CD/PRICE');</p><p>Toate sub-ramurile PRICE ale sucursalei CD vor fi plasate în colecția Nodes. Vom reveni la discuția despre șabloanele XSL puțin mai târziu.</p><p>Manipularea ramurilor copiilor</p><p>Var XMLDoc: IXMLDOMDocument;</p><p>Rădăcină: IXMLDOMNode; <CD>…</CD> Nod: IXMLDOMNode; <TITLE>….

XMLDoc:= CoDOMDocument.Create;

XMLDoc.Async:= False; XMLDoc.Load('C:\DATA\DATA.xml'); // Obține elementul rădăcină Root:= XMLDoc.DocumentElement; <ARTIST>// și prima ramură copil Node:= Root.FirstChild; <COUNTRY>// Îndepărtați prima ramură copil Node.RemoveChild(Node.FirstChild); <COMPANY>În exemplul de mai sus, nu am șters prima ramură <PRICE>, iar primul element al ramurii este <YEAR>Acum să adăugăm o nouă ramură. Mai jos este codul care arată cum să adăugați o nouă intrare CD-ROM muzicală:</p><p>Var NewNode: IXMLDOMNode;</p> <ul><li>Copil: IXMLDOMNode; <ul><li>... // Creați o nouă ramură -</li> <li>NewNode:= XMLDoc.CreateNode(1, 'CD', '');</li> <li>// Adăugați un element</li> <li>Copil:= XMLDoc.CreateNode(1,‘TITLE’,‘’);</li> </ul></li> <li>// Adăugați un element NewNode.AppendChild(Child);</li> </ul><p>// Și setați valoarea Child.Text:= 'Pink Floyd';</p> <h2>// Adăugați un element</h2> <p>Copil:= XMLDoc.CreateNode(1, 'ARTIST', '');</p> <p>Am analizat deja utilizarea acestui obiect în exemplul dat în secțiunea „Navigarea în arborele documentelor”. Vă prezentăm aici câteva remarci teoretice.</p> <p>Numărul de ramuri din listă poate fi obținut ca valoare a proprietății Length. Ramurile au indici de la 0 la Lungimea-1, iar fiecare ramură individuală este accesibilă prin elementul matrice Item cu indexul corespunzător.</p> <p>Navigarea printr-o listă de ramuri se poate face și folosind metoda NextNode, care returnează următoarea ramură din listă, sau Nil dacă ramura curentă este ultima.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Pentru a reveni la începutul listei, apelați metoda Reset.</h2> <p>Crearea și salvarea documentelor</p><p>Până acum am analizat cum puteți adăuga ramuri și elemente la documentele XML existente. <CATALOG></CATALOG> Acum să creăm un document XML din mers. În primul rând, permiteți-ne să vă reamintim că un document poate fi încărcat nu numai dintr-un URL, ci și dintr-un șir obișnuit. Următoarele arată cum să creați un element rădăcină, care poate fi apoi folosit pentru a construi dinamic alte elemente (pe care le-am acoperit deja în secțiunea Manipularea ramurilor copilului):</p><p>Var XMLDoc: IXMLDOMDocument;</p> <p>Rădăcină: IXMLDOMNode;</p> <p>Nod: IXMLDOMNode;</p><p>S: WideString;</p><p>... S:= ‘</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>';</h2> <p>Când discutăm despre metoda SelectNodes a obiectului XMLDOMNode, am menționat că oferă o modalitate mai flexibilă de a accesa ramurile documentelor. Flexibilitatea constă în faptul că puteți specifica un șablon XSL ca criteriu de selectare a ramurilor. Astfel de șabloane oferă un mecanism puternic pentru căutarea informațiilor în documente XML. De exemplu, pentru a obține o listă cu toate titlurile CD-ROM-urilor muzicale din catalogul nostru, puteți rula următoarea interogare:</p><p>Pentru a afla ce discuri ale artiștilor au fost lansate în SUA, cererea se formează după cum urmează:</p><p>Noduri:= Root.SelectNodes('CD/ARTIST');</p><p>Următoarele arată cum să găsiți prima unitate din director:</p><p>Noduri:= Root.SelectNodes('CD/TITLE');</p><p>si ultimul:</p><p>Noduri:= Root.SelectNodes('CD/TITLE');</p><p>Pentru a găsi CD-uri Bob Dylan, puteți rula următoarea interogare:</p><p>Noduri:= Root.SelectNodes(‘CD[$any$ ARTIST= ”Bob Dylan”]/TITLE’);</p><p>și pentru a obține o listă de discuri lansate după 1985, rulăm următoarea interogare:</p><p>Noduri:= Root.SelectNodes('CD/TITLE');</p><p>O discuție mai detaliată despre sintaxa XSL necesită o postare separată. Pentru a intriga cititorii și pentru a încuraja cercetările ulterioare, voi da doar un mic exemplu de posibile utilizări ale XSL. Să presupunem că trebuie să ne transformăm catalogul într-un tabel HTML obișnuit. Folosind metode tradiționale, trebuie să trecem prin toate ramurile arborelui și să formăm etichetele corespunzătoare pentru fiecare element primit. <TD>…</TD>.</p> <p>Folosind XSL, pur și simplu creăm un șablon (sau o foaie de stil) în care indicăm ce trebuie convertit și cum. Apoi suprapunem acest șablon pe directorul nostru - și am terminat: avem textul unui șablon XSL care convertește directorul într-un tabel (Listing 2).</p> <p>Codul pentru suprapunerea șablonului XSL în directorul nostru arată astfel:</p><p>Procedura TForm1.Button2Click(Expeditor: TObject);</p><p>var XSLDoc: IXMLDOMDocument;</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>începe XSLDoc:= CoDOMDocument.Create;</h2> <p>XSLDoc.Load('C:\DATA\DATA.xsl');</p> <p>Memo2.Text:= XMLDoc.TransformNode(XSLDoc);</p> <p>XSLDoc:= Nil; <br>Delphi este al doilea cel mai important limbaj de programare cu care studenții sunt cel mai des introduși în timpul studiilor. Acesta este începutul învățării programarii orientate pe obiecte. Ca student, am ajuns la concluzia că nu există o modalitate mai ușoară de a stăpâni o limbă decât de a scrie un calculator în ea. Chiar dacă implementați o funcție de bază pentru adăugarea a două numere, aceasta va pune în lumină multe.</p> <p>CodeGaear, Delphi 7, Lazarus sunt compilatoare diferite, programe care vor transfera codul pe care îl scrieți pe mașină, transformându-l în zerouri și unu. Acestea sunt toate programe pentru crearea de programe, nu limbaje de programare separate. Aceste compilatoare folosesc limbajul de programare Object Pascal, care este baza limbajului Delphi, care este similar ca sintaxă cu Pascal obișnuit, dar diferă semnificativ din punct de vedere funcțional. <br></p> <h2>Ce este sintaxa limbajului de programare?</h2> <p>Acesta este formatul pentru scrierea diferiților operatori. De exemplu, o buclă „for” în Pascal are următorul format: „for n:=1 to k do”, etc.</p><p>În limbajul de programare C++, același ciclu este scris ușor diferit: pentru (n = 1; n Scriem un calculator</p><p>Acest lucru vă va oferi o înțelegere a modului în care obiectele interacționează cu codul programului, ce sunt „variabilele” și cum funcționează funcțiile matematice. Orice programare va fi un calcul în orice caz. Un joc este și un program care calculează constant ceva, funcționează cu numere și funcții numerice. Programarea este inseparabilă de matematică.</p> <p>Vom folosi mediul de dezvoltare Lazarus pentru scriere. Funcționalitatea sa nu este la fel de bogată ca, de exemplu, CodeGear, dar este disponibilă gratuit și este destinată învățării.</p><p>Deschizând mediul de dezvoltare, vedem un formular și o bară de instrumente. Iată formularul.</p> <p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-24.jpg' width="100%" loading=lazy loading=lazy></p><p>Aici este panoul cu elemente.</p><p>Primul lucru pe care îl vom face este să adăugăm cele trei elemente de care avem nevoie pentru a implementa funcția de a adăuga două numere. Aveți nevoie de: „Tedit” în cantitate de trei bucăți și „TButton”. În imaginea de mai jos sunt afișate în panoul cu săgeți. Facem clic pe ele o dată, apoi o dată pe formular și apar pe el.</p><p>Acestea sunt câmpuri de introducere a textului și un buton obișnuit. Întâlnești aceste elemente atunci când folosești aproape orice program Windows. Aruncă o privire.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Acum să ștergem aceste inscripții. Faceți clic pe fila Vizualizare. Și faceți clic pe „Inspector de obiecte”. Va apărea o fereastră ca aceasta.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>Facem clic o dată pe elementul nostru „Button” din formular și schimbăm valoarea „Caption” din fereastra de inspector cu oricare alta. De exemplu, cuvântul „Ok”. Apăsați Enter. Vedem pe formular cum elementul și-a schimbat numele.</p><p>Vom face același lucru cu Editările, dar nu le vom redenumi, ci le vom face fără niciun conținut. Selectați-le unul câte unul și ștergeți valoarea Text din inspector. Nu uitați să apăsați Enter.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-29.jpg' width="100%" loading=lazy loading=lazy></p><p>Drept urmare, forma noastră arată astfel.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-30.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Acum, pentru ca calculatorul nostru să funcționeze, trebuie să scriem codul de program necesar pentru procedura butonului nostru. Faceți dublu clic pe elementul Button și deschideți editorul de cod sursă.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-31.jpg' width="100%" loading=lazy loading=lazy></p><p>vezi? Butonul de procedură1Clic. Aceasta este o procedură care este responsabilă pentru ceea ce se va întâmpla atunci când apăsăm butonul o dată. Și ar trebui să se întâmple următoarele: programul trebuie să afișeze în a treia Editare suma numerelor introduse în primele două câmpuri. Scriem cod.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-32.jpg' width="100%" loading=lazy loading=lazy></p><p>Trebuie să scriem atât de simple 5 linii de cod. Comentariile și explicațiile sunt vizibile în imaginea de mai sus. După aceea, faceți clic pe acest buton.</p> <p>Proiectul nostru va fi compilat. Va fi compilat într-un program. Introducem numerele în primele două câmpuri, facem clic pe buton și obținem valoarea sumei.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-34-2.jpg' width="100%" loading=lazy loading=lazy></p> <h2>Concluzie</h2> <p>Puteți face clic pe butonul „Fișier”, apoi pe „Salvați tot”, selectați un folder de salvat și veți avea un program complet care poate fi lansat de pe desktop. Acum încercați să vă dați seama singur ce trebuie rescris în acest cod, astfel încât programul să împartă două numere în loc să le adauge. Sugestie: trebuie să schimbați tipul de date. Videoclipul de mai jos arată un exemplu similar, dar în Delphi 7, nu în Lazăr.</p><p><span class="6qR5tjJKK3g"></span></p> <p>Recent, s-a acordat multă atenție construirii de sisteme de e-business, sau așa cum sunt numite și - B2B (business to business). Ținând cont de recomandările pentru construirea sistemelor de schimb streaming ale organismului coordonator de tehnologii Internet - Consorțiul WWW: se pune accent pe tehnologiile XML și construcția sistemelor de schimb de documente XML.</p> <p>Avantajul utilizării XML în afacerile electronice este eficiența ridicată a sistemelor B2B la costuri reduse ale creării acestuia datorită unei prezentări clare și vizuale a informațiilor structurate, capacității de a utiliza protocoale de rețea moderne și de a crea sisteme de afaceri în timp real.</p> <p>Independența prezentării informațiilor sub formă de documente XML permite diferitelor companii care participă la afaceri electronice să producă software independent unul de celălalt.</p> <p>În toate sistemele, schimbul este de obicei construit după aceeași schemă, folosind cereri HTTP. Protocolul SSL este folosit ca protocol de securitate a informațiilor (dar acesta este un subiect separat).</p> <p>Una dintre opțiunile posibile pentru procesarea mesajelor XML este construirea de aplicații BIN/CGI (ISAPI) sau componente COM (server) care generează sau procesează documente XML.</p> <p>Pe de o parte, aplicația acționează ca un client care emite o cerere HTTP în modul POST, pe de altă parte, există un server WEB pe partea căruia este procesată cererea și este emis răspunsul. Documentele XML sunt folosite în schimbul de informații.</p> <p>Una dintre cele mai eficiente opțiuni de implementare este utilizarea unui parser XML existent care acceptă modelul DOM. Acest parser este un pachet de distribuție al Win`98 sau o componentă a IE 4.7 și o versiune ulterioară (pentru Win`95) și reprezintă un server COM situat în biblioteca msxml.dll.</p> <p>Component Object Model (COM) - reprezintă date și metode încapsulate într-o singură entitate și o modalitate de a le accesa printr-un sistem de interfețe. Folosind Delphi, este destul de ușor să accesați clasele unui obiect COM (mai multe clase pot fi incluse într-un server COM). Obiectele sunt accesate prin inițializarea unei instanțe a clasei printr-un sistem de interfețe. Descrierea interfețelor este realizată de Interface Definition Language (IDL), care se poate face automat folosind mediul.</p> <p>Instrumente Delphi de import de pe un server COM <i>msxml.dll</i>, sunt construite fișiere de descriere a interfeței IDL și un fișier de descriere binar de tipuri de biblioteci - TLB -. Această operațiune se realizează prin meniul de sistem: <b>Proiect | Tip Biblioteca Import:</b>(Figura 1). În continuare, apare o casetă de dialog (Figura 2), în care trebuie să selectați un obiect COM (în cazul nostru, obiectul este înregistrat sub numele „Microsoft.XMLDom (Versiunea 2.0)”) și să creați un fișier TLB (buton <b>Creați o unitate</b>). Folosind fișierul TLB, mediul generează un fișier de descriere a serverului COM „Pascal” - MSXML_TLB.pas</p> <p>Fișierul MSXML_TLB.pas descrie toate interfețele, constantele și co-clasele serverului COM.</p> <p>Pentru a accesa obiectele elementului COM, este necesar în directivă <b>UTILIZĂRI</b> adăugați numele fișierului de descriere a bibliotecii (MSXML_TLB.pas). Mai jos este un program simplu care utilizează analizatorul standard DOM msxml.dll, care încarcă un document XML și îl afișează în elementul câmp de text Memo1.</p> <b>utilizări</b> Windows, Mesaje, SysUtils, Clase, Grafică, Controale, Formulare, Dialoguri, OleServer, MSXML_TLB, StdCtrls; <b>tip</b> TForm1 = <b>clasă</b>(TForm)Button1: TButton; <b>Memo1: TMemo;</b> procedură <b>Button1Click(Expeditor: TObject);</b> <b>Sfârşit;</b> var <b>Form1: TForm1;</b> implementare <b>($R *.DFM)</b> Procedură <span>// declararea unei coclase a obiectului DOMDocument;</span> <b>Sfârşit;</b> coDoc: CoDOMDocument; <span>// clasa compatibilă cu interfața IDOMDocument;</span> <b>Sfârşit;</b> Doc: IXMLDOMDocument; <b>ÎNCEPE</b> <span>// crearea unei instanțe a unui obiect DOMDocument;</span> Doc:= coDoc.Create; <span>// apelarea metodei Load a unei instanțe de obiect DOMDocument;</span> Doc.load("data.xml"); <span>// acces la proprietatea xml a instanței obiectului DOMDocument;</span> Memo1.Text:=Doc.xml; <b>Sfârşit;</b> <b>Sfârşit.</b> <h2>Conceptul de DOM - Document Object Model</h2> <p>Fiecare document XML este reprezentat ca un set de mai multe obiecte (clase), cu ajutorul cărora este posibil accesul la elemente individuale (câmpuri obiect). DOM - interfața descrie accesul atât la obiecte simple de tip DOMString sau CharacterData, cât și la părți sau elemente individuale ale unui document XML: DOMFragmentElement, DOMNode, DOMElement.</p> <p>Mai jos sunt cele mai importante proprietăți și metode ale obiectelor XMLDOMNode, XMLDOMNode, XMLDOMNodeList. Trebuie remarcat faptul că metodele și funcțiile obiectelor DOM (Document Object Model) prezentate mai jos sunt utilizate de analizatorul Microsoft XML msxml.dll și sunt ceva mai largi decât modelul DOM aprobat de Consorțiul W3C.</p> <p>O descriere mai completă a interfeței obiect DOM poate fi găsită la</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">Obiect XMLDOMDocument</td> </tr><tr><td valign="top" colspan="2">Reprezintă nivelul superior al ierarhiei obiectelor și conține metode de lucru cu un document: încărcarea acestuia, analizarea acestuia, crearea de elemente, atribute, comentarii în el etc. .</td> </tr><tr><td valign="top" colspan="2"><b>Proprietăți</b> </td> </tr><tr><td valign="top" width="39%"><b>Async</b> </td> <td valign="top" width="61%">Proprietate care identifică modul curent de procesare</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">Returnează o referință la obiectul de tratare a erorilor XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Activează - dezactivează verificarea documentelor.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">Returnează adresa URL a documentului</td> </tr><tr><td valign="top" width="39%"><b>documentElement</b> </td> <td valign="top" width="61%">Conține o referință la elementul rădăcină al documentului ca obiect XMLDOMElement.</td> </tr><tr><td valign="top" colspan="2"><b>Metode</b> </td> </tr><tr><td valign="top" width="39%"><b>încărcare(url) <br>loadXML(xmlString)</b> </td> <td valign="top" width="61%">Încarcă un document XML,</td> </tr><tr><td valign="top" width="39%"><b>salvare(objTarget)</b> </td> <td valign="top" width="61%">Salvează un document XML într-un fișier</td> </tr><tr><td valign="top" width="39%"><b>avort</b> </td> <td valign="top" width="61%">Întreruperea procesului de încărcare și procesare a documentelor.</td> </tr><tr><td valign="top" width="39%"><b>createAtribute(nume)</b> </td> <td valign="top" width="61%">Creează un nou atribut cu numele specificat pentru elementul curent.</td> </tr><tr><td valign="top" width="39%"><b>createNode(Tip, nume, nameSpaceURI)</b> </td> <td valign="top" width="61%">Creează un nod de tipul și numele specificate</td> </tr><tr><td valign="top" width="39%"><b>createElement(etichetăNume)</b> </td> <td valign="top" width="61%">Creează un element de document cu numele specificat.</td> </tr><tr><td valign="top" width="39%"><b>createTextNode(date)</b> </td> <td valign="top" width="61%">Creează text în interiorul unui document</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName(nume etichetă)</b> </td> <td valign="top" width="61%">Returnează o referință la o colecție de elemente de document cu numele dat</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID(idString)</b> </td> <td valign="top" width="61%">Căutarea unui element după ID</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>Obiect XMLDOMNode</b> </td> </tr><tr><td valign="top" colspan="2">Un obiect XMLDOMNode care implementează interfața de bază DOM <b>Nodul</b>, este destinat manipulării unui singur nod al arborelui documentului. Proprietățile și metodele sale vă permit să obțineți și să modificați informații complete despre nodul curent - tipul acestuia, numele, numele complet, conținutul său, lista de elemente copil etc.</td> </tr><tr><td valign="top" colspan="2"><b>Proprietăți</b> </td> </tr><tr><td valign="top" width=" "><b>nodeName, bazăName</b> </td> <td valign="top" width="65%">Returnează numele nodului curent.</td> </tr><tr><td valign="top" width="35%"><b>prefix</b> </td> <td valign="top" width="65%">Returnează prefixul Namespace.</td> </tr><tr><td valign="top" width="35%"><b>dataType</b> </td> <td valign="top" width="65%">Determină tipul de conținut al nodului curent</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Returnează tipul nodului curent:</td> </tr><tr><td valign="top" width="35%"><b>atribute</b> </td> <td valign="top" width="65%">Returnează o listă de atribute ale nodului curent ca o colecție de XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>text</b> </td> <td valign="top" width="65%">Returnează conținutul subarborescului curent ca text</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Returnează o reprezentare XML a subarborelui curent.</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">Returnează conținutul nodului curent.</td> </tr><tr><td valign="top" width="35%"><b>childNodes</b> </td> <td valign="top" width="65%">Returnează o listă de elemente copil ca XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>primulCopil, ultimulCopil</b> </td> <td valign="top" width="65%">Returnează primul/ultimul element copil</td> </tr><tr><td valign="top" width="35%"><b>precedentul frate ,nextFrate</b> </td> <td valign="top" width="65%">Returnează elementul frate anterior/următorul.</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">Conține un link către elementul părinte.</td> </tr><tr><td valign="top" width="35%"><b>proprietarDocument</b> </td> <td valign="top" width="65%">Returnează un pointer către documentul în care se află nodul curent.</td> </tr><tr><td valign="top" colspan="2"><b>Metode</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild(newChild)</b> </td> <td valign="top" width="65%">Adaugă un nou element copil la nodul curent.</td> </tr><tr><td valign="top" width="35%"><b>insertBefore(newChild, refChild)</b> </td> <td valign="top" width="65%">Inserează un nod copil, poziționându-l în subarborele curent „în stânga” nodului specificat de parametrul refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode(adânc)</b> </td> <td valign="top" width="65%">Creați o copie a elementului curent.</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(nume) <br> </b><b>getAttributeNode</b><b><span>(nume) <br>setAttribute(nume, valoare) <br>setAttributeNode(XMLDOAtribut)</span> </b> </td> <td valign="top" width="65%">Acces la atributele (crearea, citirea, scrierea) unui obiect. Nume este numele atributului, valoarea este valoarea acestuia. Returnează valoarea unui obiect XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>replaceChild(newChild, oldChild) removeChild(oldChild)</b> </td> <td valign="top" width="65%">Înlocuiește obiectul oldChild din lista curentă de obiecte copil cu newChild. Ștergerea obiectului oldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes(patternString) selectSingleNode(patternString)</b> </td> <td valign="top" width="65%">Returnează obiectul XMLDOMNodeList selectat de modelul de căutare sau de primul nod</td> </tr><tr><td valign="top" width="35%"><b>transformNode(foaia de stil) <br>transformNodeToObject(foaia de stil, outputObject)</b> </td> <td valign="top" width="65%">Atribuie o foaie de stil subarborelului nodului curent și returnează un șir - rezultatul procesării. O referință la obiectul DOMDocument care conține instrucțiuni XSL este transmisă ca parametru.</td> </tr></tbody></table><br><h2>Utilizarea XML în afaceri.</h2> <p>Pentru o imagine mai clară, este nevoie de o explicație cu privire la motivul pentru care toate acestea sunt necesare pentru a înțelege cum funcționează:</p> <p>La construirea unui sistem ERP B2B sau corporativ, la organizarea schimbului de informații de documente XML între întreprinderi sau sucursale ale unei companii, se utilizează un sistem de transfer de informații efectiv dovedit, bazat pe serverele WEB existente prin protocoale HTTP.</p> <p>Pe de o parte, aplicația acționează ca un client, care emite o cerere HTTP în modul POST, pe de altă parte, există un server WEB, pe a cărui parte se procesează cererea și se emite răspunsul; Documentele XML sunt folosite ca schimb.</p> <p>De exemplu, într-un sistem ERP corporativ simplu, un program de contabilitate (ASU Bukhuchet) trebuie să genereze o anumită solicitare pentru emiterea unei facturi și să o transfere la o sucursală care are un depozit (ASU Warehouse). AWP O formulare similară a problemei la crearea unui sistem B2B, când Întreprinderea A solicită disponibilitatea produselor (place o comandă de achiziție) de la Furnizorul B.</p> <p>Enterprise A și programul său acționează ca un client. Depozitul este întreținut de furnizorul B, care are un complex de baze de date de depozit pe un server SQL. Schimbul se realizează prin serverul WEB corporativ al Furnizorului B.</p> <p>Următorul algoritm tipic de schimb este prezentat mai jos:</p> <br>Figura 3. <ol><li><b>Întreprinderea A</b> initiaza <b>procesul A</b>(comanda de produs), care acționează ca client WEB.</li><li><b>Procesul A</b> generează un document XML (de exemplu, o cerere de factură) și îl transmite ca cerere POST http către serverul WEB al furnizorului B. Identificatorul de resurse al aplicației de procesare este utilizat ca URI. URI-ul poate fi același pentru toate tipurile de documente sau individual pentru fiecare tip. Totul depinde de structura serverului B2B (WEB).</li><li>Serverul WEB analizează cererea și generează un server <b>Procesul B</b>, trecând corpul documentului XML ca parametru. <br>Procesul B este lansat de serverul WEB și procesat fie ca pagină ASP, aplicație CGI (ISAPI) fie ca serverlet JAVA (aplicație server)</li><li><b>Procesul B</b>- generează o cerere către serverul bazei de date SQL.</li><li>Serverul SQL efectuează operațiunile necesare în baza de date, generează un răspuns și îl returnează <b>Procesul B</b>.</li><li>Pe baza răspunsului de la serverul SQL <b>Procesul B</b> generează un document XML (răspuns) și îl returnează ca răspuns la o solicitare http către aplicația client.</li><li>Apoi, în funcție de situația din partea clientului, fie este generată o nouă solicitare http, fie sesiunea se încheie.</li> </ol><h2>Câteva cuvinte despre organizarea fluxului de documente.</h2> <p>Regula generală pentru dezvoltarea unui sistem de schimb de documente XML este:</p><ul><li><b>În primul rând</b>- elaborarea unei diagrame de flux a documentelor electronice și structura acestora;</li><li><b>în al doilea rând</b>- elaborarea tabelelor de funcții de proces (subprocese), i.e. care funcție în raport cu ce document XML va implementa fiecare proces.</li> </ul><p>Fiecare document XML, ca un document HTML, trebuie să fie format dintr-un antet de mesaj (informații incluse în etichete) și un corp de mesaj (pentru o solicitare, aceste informații sunt incluse în etichete pentru a răspunde cererii). Pentru ca documentul XML să fie format corect, este necesar să încadrezi cele două componente ale sale „Header” și „Request” cu etichete, de exemplu. Tipul de document standard este prezentat mai jos:</p> <p>Antetul (Figura 4), spre deosebire de un document HTML, trebuie să conțină diferite tipuri de informații de serviciu, inclusiv informații despre tipul de document care este transmis și procesul de prelucrare a acestuia. Corpul documentului intră în procesarea informațiilor, i.e. conținut încadrat cu etichete. Trebuie remarcat faptul că structura titlurilor trebuie să fie aceeași pentru toate tipurile de documente.</p> <p>Pentru un Proces lansat de server, algoritmul de procesare este de preferință (dar nu neapărat) construit după cum urmează:</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>Figura 6. <h2>Câteva puncte fundamentale la crearea părții client</h2> <p>După cum sa explicat deja, atunci când se creează un document XML, se utilizează reprezentarea acestuia sub forma unui model DOM. Mai jos este un exemplu de parte a textului Delphi al programului pentru crearea unui antet de mesaj xml.</p> <b>Memo1: TMemo;</b> TThread1.HeaderCreate(Expeditor: Tobject); <b>Sfârşit;</b> <span>// declarația unei coclase, necesară pentru a crea</span> coDoc: CoDomDocument; <span>// Obiect XMLDomDocument</span> Doc: DomDocument; <b>ÎNCEPE</b> <span>r: IXMLDOMElement;</span> Nod: IXMLDOMElement; <span>// DOMText txt: IXMLDOMText;</span>// DOMAttribute attr: IXMLDOMAttribute; <Header/>"); <span>// creează un document DOM<<b>Doc:=coDoc.Create;</b>>) </span> Doc.Set_async(false); <span>// inițierea inițială a documentului DOM <b>Doc.LoadXML("</b>" </span>// se creează DOMElement (tag <span>Expeditor<<b>Doc:=coDoc.Create;</b> Nod:= Doc.createElement("Expeditor");</span> <span>// creează un nod text " <b>Doc.LoadXML("</b>" </span> SRL „Taifun” <span>txt:= Doc.createTextNode("Typhoon LLC");<<b>Doc:=coDoc.Create;</b>// alocare la nod</span>> valoare <span> <<b>// nodul text "</b>> </span> Node.appendChild(txt); <span>// adăugarea unui element<<b>> la rădăcina documentului în copilărie</b>> </span> r.appendChild(Nodul); <span>Din</span> Nod:= Doc.createElement("De la"); <span>txt:= Doc.createTextNode ("http://tayfun.ru/xml/default.asp");</span> Node.appendChild(txt); <span> // <TypeDocument Id="Order"/> </span> r.appendChild(Nodul); <b>Sfârşit;</b> <p>De remarcat faptul că declararea variabilei coDoc: CoDomDocument și Doc: DomDocument , precum și crearea acesteia prin metoda Create (Doc:=coDoc.Create;) se realizează o singură dată. Declarația variabilei este situată în secțiunea de declarare a variabilelor globale și nu în procedura locală, așa cum a fost demonstrat pentru claritate în acest exemplu (adică, o variabilă globală de tip DomDocument per modul de program).</p> <p>Rezultatul programului de mai sus va fi antetul creat, în raport cu exemplul nostru de document xml: prezentat în Figura 5.</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>Figura 5. <p><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>Figura 6.</p><p>Principalul avantaj al transmiterii de informații sub formă de documente XML este că este posibil să se genereze un mesaj folosind structuri de tabel independente în DBMS atât pe partea de recepție, cât și pe cea de transmisie. Folosind exemplul nostru, să presupunem că trebuie să transferăm informații despre facturile întreprinderii A dintr-un SGBD având structura prezentată în Figura 6</p> <p>Pentru a genera un document xml care conține o factură, o interogare SQL (interogarea A) este creată inițial cu informații despre factura în sine:</p> <b>SELECTA</b>* DIN Factura_General <b>UNDE</b> InvoiceNum = :num <b>SELECTA</b> Bunuri, Calitate, Pret, HZ_cod <b>DIN</b> Bunuri <b>UNDE</b> InvoiceNum = :num <span>// :num - parametru care specifică numărul facturii.</span> <p>Mai jos este o parte a programului care formează corpul documentului xml:</p> <b>Memo1: TMemo;</b> TThread1.DataBodyCreate(Expeditor: Tobject); <b>Sfârşit;</b> <span>// declararea unei coclase și a unui obiect XMLDomDocument</span>//coDoc: CoDomDocument ; <span>// trebuie să fie global pentru întregul modul.</span>//Doc: DomDocument ; <span>// declararea obiectelor DOMElement</span> r: IXMLDOMElement; <span>// DOMElement; <b>Nod, Node2: IXMLDOMElement;</b> Nodul 3, Nodul 4: IXMLDOMElement; <b>// DOMText txt: IXMLDOMText;</b> str: String;</span> <b>ÎNCEPE</b>// InvoiceNumber: <span>întreg;</span>- variabilă globală - // are valoarea 987654 // interogareA, interogareB: <span>Şir;</span>- variabila globala, // are o valoare corespunzatoare cererii // interogareA - solicitare A informatii generale despre factura // interogareB - solicitare B informatii despre marfa descrisa in // factura (vezi text) <span>Interogare.Închidere;</span>// vezi textul "interogare A" <span>Interogare.Text:= interogareA;</span>// execută cererea <span>Query.ExecSQL;</span> Interogare.Deschidere; <span>// obținerea adresei elementului rădăcină</span> r:=Doc.Get_documentElement; <span>Interogare.Text:= interogareA;</span> Node2:= Doc.createElement("Solicitare"); <span>// obținerea adresei elementului rădăcină</span>// creează DOMElement (etichetă) <span>Nod:= Doc.createElement("Factură");</span>// adăugarea unui element la rădăcină <span>// crearea unui nod text = valoarea câmpului</span><span>// atribuirea unei valori nodului</span> <span>// nod text, variabila str</span> SRL „Taifun” <span>// operații similare pentru etichetă <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(câmpul DB „Destinatar”)</span> Nod:= Doc.createElement("Destinație"); <span>// numele câmpului bazei de date poate să nu coincidă cu numele</span> str:= Query.FieldByName ("Destinatar ").AsString; <span>// etichetă, acesta este avantajul utilizării</span> txt:= Doc.createTextNode(str); <span>// DOM al interfeței în fața unui DBMS care acceptă o interfață XML, // ca ORACLE 8i sau Ms SQL 2000</span> Node.appendChild(txt); ... <span>// generarea unei cereri de specificații pentru mărfuri</span> <span>// închide cererea de acces</span> Interogare.Închidere; <span>// vezi in textul "cerere B", informatii. Despre produse</span> Interogare.Text:= interogareВ; <span>// atribuirea valorilor parametrilor</span> Query.Params.AsInteger:= InvoiceNumber; <span>Şir;</span> Query2.ExecSQL; <span>// deschiderea accesului la datele solicitate</span> Interogare.Deschidere; <span>Interogare.Text:= interogareA;</span> Node3:= Doc.createElement("Imems"); <span>// obținerea adresei elementului rădăcină</span> Nodul. appendChild(Nodul3); <span>// parcurge toate liniile de interogare</span> <b>în timp ce</b> <b>nu</b> Eof.Query <b>do</b> start Node4:= Doc.createElement("Imem"); <span>// obținerea adresei elementului rădăcină</span> Node3.appendChild(Nod4); <span>// generează date pentru etichetă</span> str:= Query.FieldByName("Preț").AsString; <span>txt:= Doc.createTextNode(str); <HZ_Cod>, <Quality>, <GoodName> </span> <b>Sfârşit;</b> <b>Sfârşit;</b> <p>Node.appendChild(txt);</p> <table width="100%"><tbody><tr><td align="middle"><br><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128661.gif' width="100%" loading=lazy loading=lazy></td> </tr></tbody></table><p>... <b>// operații similare pentru etichete</b>:</p> <b>Memo1: TMemo;</b> Ca rezultat al acestei proceduri, este generat următorul text al documentului XML: <h2>Pentru a forma o cerere, se folosește metoda Open a obiectului</h2> <p>IXMLHttpRequest</p> <p>Open(const bstrMethod, - metoda tip ="POST" bstrUrl, - adresa server URL varAsync, - mod de comunicare asincron/sincron = true bstrUser, - nume de utilizator pentru autentificare bstrPassword) - parola</p> <b>Memo1: TMemo;</b> Crearea unei părți server de procesare a documentelor <b>Sfârşit;</b> <span>După cum sa menționat mai devreme, procesarea cererilor HTTP poate fi efectuată fie de aplicații CGI, fie de servlet-uri Java. De asemenea, este posibil să scrieți pagini ASP. Dar în acest caz, transferul de date este posibil numai folosind metoda „GET” printr-un șir de interogare. Deși, procesarea solicitărilor HTTP pentru paginile ASP este mai eficientă decât pentru o aplicație CGI. Cu toate acestea, în opinia mea, nu are nicio diferență cum să procesezi, dar ceea ce este mai important este să rezolvi întrebarea - cum să construiești un program de procesare și nu prin ce mijloace.</span> Dacă din capitolul anterior ne-am uitat la opțiunile de generare a unui document XML, atunci sarcina aplicației server este invers - analizarea documentelor XML. Mai jos este o parte a programului care analizează documentul xml: <span>Tthread1.DataParser(Expeditor: Tobject);</span>// declararea obiectelor DOMElement <span>r,FNode: IXMLDOMElement;</span> XMLDoc, XSLDoc, ResultDoc: DomDocument ; <span>// HttpStr: String; - variabila globala care contine sirul de solicitare HTTP</span> <b>ÎNCEPE</b> XMLDoc:=coDocXML.Create; <span>Interogare.Închidere;</span> XMLDoc.LoadXML(HttpStr); <span>r:=Doc.Get_documentElement;</span>// obținerea valorii elementului <span>FNode:= r.SelectSingleNode("//TypeDocument");</span>// obținerea valorii atributului id="Comandă" <span>FileName:= FNode.GetAttibute("id");</span>// și formând numele de fișier Order.xsl <span>FileName:= FileName+".xsl";</span>// creează un document XSLDoc <span>XSLDoc:=coDocXSL.Create;</span> XSLDoc.LoadXML(FileName); <span>// creează un document XMLDoc</span> ResultDoc:=coDocResult.Create; <span>// setarea modului de procesare sincronă</span> ResultDoc.Set_async(false); <span>// setează verificarea analizei</span> ResultDoc.validateOnParse:= adevărat; <span>// analizează XMLDoc folosind un șablon XSL</span> <span>XMLDoc.transformNodeToObject(XSLDoc, ResultDoc);</span>// variabilei Str i se atribuie o valoare text <span>// documentul rezultat.</span> Str:= ResultDoc.text; <span>// caută element</span> FNode:= r.SelectSingleNode("//InvoiceNumber"); <span>// închide cererea de acces</span>// și obținerea valorii elementului <span>parm:= FNode.text;</span> Interogare.Închidere; <span>Şir;</span> Interogare.Text:= Str; <b>Sfârşit;</b> <p>// atribuirea unei valori parametru</p> <p>Query.Params.AsString:= parm;</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">Query.ExecSQL; <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">Întregul punct culminant al analizei este utilizarea unui șablon XSL, care este generat individual pentru fiecare tip de document. Rezultatul analizei este un șir de interogare SQL. Ulterior, executarea șirului de interogare SQL generat va face modificările necesare datelor din DBMS. <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>Avantajul utilizării analizei printr-un șablon este că datele sunt oarecum flexibile, iar funcționarea algoritmului este complet independentă de codul programului. Mai jos este textul șablonului XSL utilizat pentru a procesa un document COMANDĂ:</p> <p>INSERT în TABREG (FROM, TO, TYPEDOC,body) VALUES(" <b>INSERT in GOODS (invoiceNumber, name, price, quality) VALUES(" :num", "</b> Explicând exemplul de mai sus, trebuie remarcat faptul că utilizarea unei perechi de etichete este de natură formală, deoarece după parsare, documentul XML rezultat trebuie să conțină în mod formal cel puțin un nod. Metoda ResultDoc.text atribuie valoarea textului documentului XML ResultDoc obținut în timpul parsării. În acest caz, valoarea este tot ceea ce este încadrat de o pereche de etichete și, i.e. Interogarea SQL pe care am generat-o.</p><h2>Pe scurt despre XSL</h2> <p>Abrevierea XSL provine de la eXtensible Stylesheet Language - un limbaj pentru formatarea foilor de stil (date XML). După cum sugerează titlul, eXtensible Stylesheet Language (XSL) este folosit pentru a formata datele XML. După definiția W3C, XSL constă din două părți:</p> <ul><li>XSLT - Transformare XSL. Un limbaj folosit pentru a converti sau formata (transforma) documente XML. Astfel, cu ajutorul XSLT putem obține diferite secțiuni ale setului de date și forme de prezentare a datelor.</li><li>Elemente de formatare. Aceste elemente includ toate elementele designului tipografic al datelor, după ce au fost prelucrate folosind XSL. Folosit numai pentru a genera pagini HTML.</li> </ul><p>Folosind XSLT, putem selecta datele de care avem nevoie dintr-un fișier XML și le putem aranja într-un formular pentru prezentare către utilizator. De exemplu, în cazul nostru, am convertit datele XML într-o interogare SQL. Utilizarea clasică a XSL este, de regulă, formatarea datelor sub formă de pagini HTML sau, mai rar, sub formă de fișiere RTF.</p> <p>Fișierul XSL descrie șablonul după care vor fi convertite datele XML. Revenind la șabloanele xsl, următoarele elemente (directive) pot fi distinse în XSLT:</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>directive XSL</b> </td><th align="middle" width="69%"> <b>descriere</b> </th> </tr><tr><td>xsl:apply-templates</td> <td>Directiva care indică aplicarea șabloanelor corespunzătoare atributului select="nume șablon".</td> </tr><tr><td>xsl:atribut</td> <td>creează un arbore de atribute și îl adaugă la elementul de ieșire, parametru nume="nume atribut", spațiu de nume - URI la spațiul de nume (prefixul spațiului de nume)</td> </tr><tr><td>xsl:call-template</td> <td>apelează șablonul, attribute name="URI la șablon"</td> </tr><tr><td>xsl: alege <br>xsl:când <br>xsl: altfel</td> <td>făcând o selecție bazată pe xsl:when expr="evaluarea unei expresii într-un script", <br>limba="nume-limbă" <br>test= „expresie evaluată”</td> </tr><tr><td>xsl:comentare</td> <td>generează un comentariu în documentul de ieșire</td> </tr><tr><td>xsl:copie <br>xsl:copy-of</td> <td>copiează nodul curent în sursa de ieșire sau lipește un fragment de document în nodul unde atributul select = „numele nodului sursă”</td> </tr><tr><td>xsl:element</td> <td>creează un element de ieșire după nume, atribut name="nume element", namespace="uri namespace reference"</td> </tr><tr><td>xsl:pentru-fiecare</td> <td>reaplică șablonul tuturor nodurilor din lista de noduri, atributul select specifică lista de noduri</td> </tr><tr><td>xsl:daca</td> <td>verificarea condiției, specificată de atributul test ca expresie</td> </tr><tr><td>xsl:include</td> <td>include șablon extern, atributul href = „URI de referință”.</td> </tr><tr><td>xsl:ieșire</td> <td>specifică rezultatul de ieșire, atributul metodei poate avea valorile „xml”, „html” sau „text”</td> </tr><tr><td>xsl:param</td> <td>specifică valoarea parametrilor, attribute name="nume parametru", select = "valoare"</td> </tr><tr><td>xsl:instrucțiune-procesare</td> <td>creează o instrucțiune de procesare, attribute name="nume instrucțiune de proces"</td> </tr><tr><td>xsl:sort</td> <td>sortează mai multe noduri, atribute select = „nume nod”, tip de date = tip de date („text” | „număr” | Qname), ordine = direcție de sortare („crescător” | „descendent”)</td> </tr><tr><td>xsl:foaie de stil</td> <td>definește un document șablon xsl, este elementul rădăcină pentru XSLT</td> </tr><tr><td>xsl:template</td> <td>definește un șablon xsl, nume atribut= „prefix URI la numele șablonului”, match= „indicație a nodului la care este aplicat șablonul”</td> </tr><tr><td>xsl:text</td> <td>generează text în fluxul de ieșire, atributul disable-output-escape = „da” sau „nu”, indică capacitatea de a genera caractere ESC</td> </tr><tr><td>xsl:value-of</td> <td>inserează valoarea nodului selectat ca text, atributul select = „pointer to node” din care este luată valoarea</td> </tr><tr><td>xsl:variabilă</td> <td>specifică valoarea limitelor variabilei, numele atributului = „numele variabilei”, select = „calculul valorii variabilei”</td> </tr><tr><td>xsl:cu-param</td> <td>aplică un parametru unui șablon, atribut nume = „nume parametru”, selectează = expresie pentru a evalua contextul curent, valoarea implicită „.”</td> </tr></tbody></table><h2>Concluzie</h2> <p>În cele din urmă, trebuie remarcat faptul că utilizarea unui parser XML standard <i>msxml.dll</i> nu este singurul instrument pentru analizarea și crearea de documente XML. De exemplu, pentru a crea documente XML este eficient să folosiți componente <b>TPageProduser</b>Şi <b>TTableProduser</b>. Dar, acest articol subliniază doar amploarea și posibilitatea utilizării modelului DOM în practică.</p> <p>Autorul va fi foarte recunoscător pentru feedback-ul cu privire la relevanța subiectului, conținutul general, stilul de prezentare, precum și pentru toate celelalte comentarii care vor ajuta la îmbunătățirea în continuare a calității scrierii unei colecții de articole și a lansării unei cărți care acoperă subiectul latura practică a utilizării documentelor XML în comerțul electronic. Informații mai detaliate despre latura practică a utilizării documentelor electronice pot fi găsite pe site-ul web al autorului www.eDocs.al.ru. Este, de asemenea, planificată să posteze texte sursă și exemple pe site-ul web al autorului.</p> <p>Bun venit! Acest blog este dedicat internetului și computerelor, sau mai degrabă a fost dedicat acestora.</p> <p>Probabil că este imediat evident că nu au apărut articole noi pe site de mulți ani. Da, aceasta este soarta majorității blogurilor. Acest proiect a fost cândva o întreprindere ambițioasă, iar autorul, la fel ca mulți alții care scriau la acea vreme, avea planuri ambițioase de a deveni unul dintre cei mai buni bloggeri ruși. Ei bine, dacă te uiți acum, dintre acele bloguri care au fost create simultan cu ale mele, majoritatea au dispărut deja în eternitate. Și pur și simplu nu am avut suficient timp să scriu pe blog. Deci da, nu mai este actualizat. Deși am câștigat odată competiția „Runet Blog 2011” cu acest site.</p> <p>Chiar mi-a venit ideea să șterg toate acestea, dar apoi am trecut în revistă materialele vechi și mi-am dat seama că ele pot fi în continuare utile cititorilor. Da, unele articole sunt depășite (dacă am suficientă putere, vor fi marcate în consecință), dar site-ul, de exemplu, poate fi util pentru începători - aici puteți citi despre conceptele de bază ale internetului, aflați cum să configurați Internet, Windows sau chiar decideți să treceți la Linux. Așa că uită-te la categorii și alege-o pe cea care ți se potrivește.</p> <p>Și totuși, sper că acesta este mai mult decât un blog, ci un adevărat ghid pentru Internet. Site-ul poate fi vizualizat în modul director, unde toate articolele disponibile sunt structurate pe categorii. Și, cine știe, poate într-o zi vor începe să apară aici articole noi de înaltă calitate.</p> <p><i>Sander</i></p> <p>Picodi.ru este un portal de reduceri de la International Coupons, un expert polonez în domeniul economiilor și al cumpărăturilor ieftine. Polonezii sunt considerați una dintre cele mai frugale națiuni din lume, așa că nu este surprinzător că acest tip de proiect a apărut din startup-ul polonez kodyrabatowe.pl. Cum poate acest portal să fie util utilizatorului mediu de internet din Rusia?</p> <p>Telefoanele moderne Android sunt mai mult decât simple telefoane. Te obișnuiești cu setul de programe instalate, istoricul apelurilor și mesajelor text, colecția ta de fotografii și multe altele. Dar timpul trece, iar dispozitivul de care ați fost complet mulțumit începe să încetinească, să se defecteze sau pur și simplu își pierde aspectul prezentabil din cauza cipurilor de pe corp sau a zgârieturilor de pe ecran. Se pune întrebarea de a alege un nou telefon și de a schimba telefonul Android. Și dacă ignorăm problema alegerii pentru moment, atunci „mutarea” la un nou telefon rămâne o problemă serioasă - nu doriți să începeți toate datele de la zero. Despre asta vom vorbi astăzi.</p> <p>Cei mai mulți dintre cititorii acestui blog, cel mai probabil, nu au întâlnit niciodată sisteme de control al versiunilor și nu le vor întâlni în viitorul apropiat. E păcat. Această invenție extrem de convenabilă este destul de folosită de programatori, dar, în opinia mea, ar putea fi foarte utilă și pentru cei care lucrează activ cu texte. Dar, probabil, acum nu există un singur sistem de control al versiunii care ar fi ușor de utilizat pentru lucrul „de birou” (Microsoft Office). Cu toate acestea, cred că materialul prezentat în articol poate fi de interes pentru toți cititorii.</p> <p>Dacă v-ați întrebat cum să vizionați filme online și să accesați internetul de pe televizor, acest articol este pentru dvs. Nu, știu că unele televizoare au deja funcționalitate Smart TV, dar nu am văzut niciodată că funcționează corect. Aparent, acesta este motivul pentru care Google a demonstrat recent un dispozitiv absolut uimitor care a devenit imediat o senzație. Vorbim despre streamerul media Chromecast, o versiune mai avansată și mai accesibilă a playerului dezastruos Nexus Q de anul trecut.</p> <p>Dongle-ul Chromecast, ale cărui dimensiuni nu depășesc 2 inci, se conectează la portul HDMI al televizorului și vă permite să vă bucurați de vizionarea conținutului web în flux. Pentru a controla streamer-ul, puteți utiliza orice dispozitiv (tabletă, PC, smartphone) bazat pe platforma de operare iOS, Windows, Android sau Mac OS.</p> <p>Acest articol este dedicat proiectării memoriei sistemului Android, problemelor care pot apărea din cauza lipsei acesteia și modalităților de a le rezolva. Nu cu mult timp în urmă, eu însumi m-am confruntat cu faptul că telefonul meu Android a început să afișeze în mod regulat mesaje despre memorie scăzută atunci când am încercat să instalez cutare sau cutare aplicație. Ceea ce a fost foarte ciudat pentru mine, avand in vedere ca conform descrierii de pe piata ar fi trebuit sa fie vreo 16GB, si am crescut si acest volum folosind un card de memorie suplimentar. Cu toate acestea, a existat o problemă și a fost nevoie de multă zguduială înainte să găsesc soluția potrivită care nu necesita acces la root sau restabilirea completă a telefonului la starea din fabrică.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> <div class="selecionadas"> <h4>Citeste si...</h4> <ul class="list-unstyled" id="veja"> <li><a href="https://tractorillo.ru/ro/luchshie-smartfony-sharp-sharp-privezla-v-rossiyu-svoi-smartfony-testiruem-i/" title="Sharp și-a adus smartphone-urile în Rusia: testăm și suntem surprinși de noul sharp">Sharp și-a adus smartphone-urile în Rusia: testăm și suntem surprinși de noul sharp</a></li> <li><a href="https://tractorillo.ru/ro/elektronnaya-pochta-gde-mozhno-ee-sozdat-kak-zaregistrirovat-pochtovyi/" title="Cum se creează un cont Google fără verificarea numărului?">Cum se creează un cont Google fără verificarea numărului?</a></li> <li><a href="https://tractorillo.ru/ro/chto-takoe-rezhim-poleta-v-smartfone-kak-otklyuchit-rezhim-poleta-opisanie/" title="Cum să dezactivați modul avion: descrierea celor mai eficiente metode Cum să eliminați modul avion pe Android">Cum să dezactivați modul avion: descrierea celor mai eficiente metode Cum să eliminați modul avion pe Android</a></li> <li><a href="https://tractorillo.ru/ro/pravilno-podklyuchit-sistemu-5-1-kompyuteru-kak-podklyuchit-akusticheskuyu/" title="Conectați corect sistemul 5">Conectați corect sistemul 5</a></li> </ul> </div> </div> <div class="social-bottom"> <div class="visible-xs col-xs-3 col-md-4"><a class="wp bt w active popup" href="https://tractorillo.ru/ro/whatsapp://send?text=https://tractorillo.ru/putevoditel-po-internetu---vse-samoe-interesnoe-v-seti-ispolzovanie/"><i class="fa fa-whatsapp" aria-hidden="true"></i></a></div> <div class="col-xs-3 col-md-4"><a class="fb bt f active popup" href="https://www.facebook.com/sharer/sharer.php?u=https://tractorillo.ru/putevoditel-po-internetu---vse-samoe-interesnoe-v-seti-ispolzovanie/"><i class="fa fa-facebook" aria-hidden="true"></i></a></div> <div class="col-xs-3 col-md-4"><a class="tw bt t active popup" href="https://twitter.com/home?status=https://tractorillo.ru/putevoditel-po-internetu---vse-samoe-interesnoe-v-seti-ispolzovanie/"><i class="fa fa-twitter" aria-hidden="true"></i></a></div> </div> <div class="related_block veja"> <div class="banheiros_middle"> <div class="clearfix"></div> </div> <div class="related_block_cnt "> <div class="related_block_lft col-xs-5"> <a href="https://tractorillo.ru/ro/zagruzit-brauzer-mazila-poslednyaya-versiya-format-factory-besplatnyi/" title="Format Factory - convertor gratuit Format Factory"> <figure><img src="/uploads/3948d6358a1ee79ac0944ca4b7e23082.jpg" width="287" height="159" alt="Format Factory - convertor gratuit Format Factory" class="img-responsive img-rounded" data-pin-nopin="true" loading=lazy loading=lazy></figure> </a> </div> <div class="related_block_rgt col-xs-7"> <p><a href="https://tractorillo.ru/ro/zagruzit-brauzer-mazila-poslednyaya-versiya-format-factory-besplatnyi/" title="Format Factory - convertor gratuit Format Factory">Format Factory - convertor gratuit Format Factory</a></p> </div> <div class="clearfix"></div> </div> <div class="related_block_cnt "> <div class="related_block_lft col-xs-5"> <a href="https://tractorillo.ru/ro/nastroika-karty-nvidia-black-desert-optimizaciya-kompyutera-pod-igry-video-o-nastroike/" title="Optimizarea computerului pentru jocuri"> <figure><img src="/uploads/f2b293a227534b369982a6cfcc513f37.jpg" width="287" height="159" alt="Optimizarea computerului pentru jocuri" class="img-responsive img-rounded" data-pin-nopin="true" loading=lazy loading=lazy></figure> </a> </div> <div class="related_block_rgt col-xs-7"> <p><a href="https://tractorillo.ru/ro/nastroika-karty-nvidia-black-desert-optimizaciya-kompyutera-pod-igry-video-o-nastroike/" title="Optimizarea computerului pentru jocuri">Optimizarea computerului pentru jocuri</a></p> </div> <div class="clearfix"></div> </div> <div class="related_block_cnt "> <div class="related_block_lft col-xs-5"> <a href="https://tractorillo.ru/ro/osobennosti-i-pravila-polnogo-klonirovaniya-dannyh-zhestkogo-diska-s-hdd-na/" title="Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10"> <figure><img src="/uploads/8a5d1a1911d7f713043c810be05d5a61.jpg" width="287" height="159" alt="Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10" class="img-responsive img-rounded" data-pin-nopin="true" loading=lazy loading=lazy></figure> </a> </div> <div class="related_block_rgt col-xs-7"> <p><a href="https://tractorillo.ru/ro/osobennosti-i-pravila-polnogo-klonirovaniya-dannyh-zhestkogo-diska-s-hdd-na/" title="Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10">Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10</a></p> </div> <div class="clearfix"></div> </div> </div> </div> <div class="adol_side_bar col-md-3"> <div class="adol_views"> <div class="banheiros_middle"> <div class="banheiros_left"> <span>Cel mai bun de pe site</span> </div> <div class="clearfix"></div> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/skrinshot-tremya-palcami-miui-takzhe-vam-ponravyatsya/"> <span>1</span> <p>Captură de ecran cu trei degete miui</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/kak-zashchitit-smartfony-ot-virusov-i-shpionskogo-po-kak-zashchitit/"> <span>2</span> <p>Cum să vă protejați telefonul de viruși</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/mozhno-li-ustanovit-vindovs-s-fleshki-ustanovka-operacionnoi/"> <span>3</span> <p>Instalarea unui sistem de operare de pe o unitate flash prin BIOS</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/bios-versiya-2-17-1246-nastroika-nastroiki-bios-detalnaya-instrukciya-v-kartinkah/"> <span>4</span> <p>Setarea BIOS versiunea 2.17 1246. Setări bios - Instrucțiuni detaliate în imagini. Secțiunea BOOT - managementul pornirii</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/kak-sbrosit-aktivaciyu-vin-10/"> <span>5</span> <p>Cum să resetați activarea Windows 10</p> <div class="clearfix"></div> </a> </div> </div> <div class="adol_views adol_latest"> <div class="banheiros_middle"> <div class="banheiros_left"> <span>Nou</span> </div> <div class="clearfix"></div> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/chto-mozhno-uznat-po-imei-iphone-kupil-iphone-chto-delat-dalshe-chto-nuzhno-znat/" title="Mi-am cumpărat un iPhone, ce să fac în continuare?"> <figure><img src="/uploads/a2790b71bb839c165a7ab4551fdd7587.jpg" width="100" height="100" alt="Mi-am cumpărat un iPhone, ce să fac în continuare?" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Mi-am cumpărat un iPhone, ce să fac în continuare?</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/kak-polzovatsya-programmoi-rufus-rezhem-fleshki-sozdanie-zagruzochnogo-usb/" title="Crearea unei unități USB bootabile utilizând programul Rufus Secțiunea „Sistem de fișiere”"> <figure><img src="/uploads/5b7a19f02a458f78f889b9d51155c69d.jpg" width="100" height="100" alt="Crearea unei unități USB bootabile utilizând programul Rufus Secțiunea „Sistem de fișiere”" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Crearea unei unități USB bootabile utilizând programul Rufus Secțiunea „Sistem de fișiere”</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/reshenie-problemy-s-assistentom-boot-camp-vosstanovlenie-zagruzhaemosti-windows-posle-ustanovki-os-x/" title="Restaurarea bootabilității Windows după instalarea OS X Yosemite Pe laptop-uri cu o baterie neamovibilă"> <figure><img src="/uploads/ece293850353b49634c571a68aa44589.jpg" width="100" height="100" alt="Restaurarea bootabilității Windows după instalarea OS X Yosemite Pe laptop-uri cu o baterie neamovibilă" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Restaurarea bootabilității Windows după instalarea OS X Yosemite Pe laptop-uri cu o baterie neamovibilă</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/eagle-programma-razrabotki-pechatnyh-plat-sozdanie-pechatnyh-plat-v-eagle-cad-dlya/" title="Crearea de PCB-uri în Eagle CAD pentru începători"> <figure><img src="/uploads/0164c8eae813cecc470686a085f42f15.jpg" width="100" height="100" alt="Crearea de PCB-uri în Eagle CAD pentru începători" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Crearea de PCB-uri în Eagle CAD pentru începători</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt" style="border-bottom:0;"> <a href="https://tractorillo.ru/ro/otslezhivanie-posylok-pochty-malaizii-otslezhivanie-pochtovyh-otpravlenii/" title="Urmărirea posturilor din Malaysia Urmărirea postării în Malaysia"> <figure><img src="/uploads/d74bb9c4c4fa69b7f812049b5e0f6465.jpg" width="100" height="100" alt="Urmărirea posturilor din Malaysia Urmărirea postării în Malaysia" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Urmărirea posturilor din Malaysia Urmărirea postării în Malaysia</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/dvuhfaktornaya-autentifikaciya-yandeks-yandeks-klyuch-prilozhenie-dlya-vhoda-v/" title="Autentificare cu doi factori Yandex"> <figure><img src="/uploads/8eada44d273c42b582ae60b4bce00173.jpg" width="100" height="100" alt="Autentificare cu doi factori Yandex" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Autentificare cu doi factori Yandex</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/luchshie-smartfony-sharp-sharp-privezla-v-rossiyu-svoi-smartfony-testiruem-i/" title="Sharp și-a adus smartphone-urile în Rusia: testăm și suntem surprinși de noul sharp"> <figure><img src="/uploads/9cca6efa5300618eb10939d1338d77b9.jpg" width="100" height="100" alt="Sharp și-a adus smartphone-urile în Rusia: testăm și suntem surprinși de noul sharp" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Sharp și-a adus smartphone-urile în Rusia: testăm și suntem surprinși de noul sharp</p> <div class="clearfix"></div> </a> </div> <div class="adol_views_cnt"> <a href="https://tractorillo.ru/ro/elektronnaya-pochta-gde-mozhno-ee-sozdat-kak-zaregistrirovat-pochtovyi/" title="Cum se creează un cont Google fără verificarea numărului?"> <figure><img src="/uploads/f4f4bee89dddd917f05f7f67b9773db6.jpg" width="100" height="100" alt="Cum se creează un cont Google fără verificarea numărului?" class="img-responsive" data-pin-nopin="true" loading=lazy loading=lazy></figure> <p>Cum se creează un cont Google fără verificarea numărului?</p> <div class="clearfix"></div> </a> </div> <div id="fixed" class="text-center adbg visible-md visible-lg"> <div id="div-gpt-ad-1503606018038-9" class="lazyload" data-ad-slot="ros_side"> </div> </div> </div> </div> </div> </div> </div> <section class="ultimas gesto gesto2 recomendados"> <div class="container"> <div class="row"> <div class="gesto_in"> <h4><span>Vă recomandăm să citiți</span></h4> <div class="quarters_left quarters_left1 col-xs-12"> <ul> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/pravilno-podklyuchit-sistemu-5-1-kompyuteru-kak-podklyuchit-akusticheskuyu/"> <figure> <img src="/uploads/12d7f9abc8dbaf648243095fa722a092.jpg" width="288" height="160" alt="Conectați corect sistemul 5" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/pravilno-podklyuchit-sistemu-5-1-kompyuteru-kak-podklyuchit-akusticheskuyu/">Conectați corect sistemul 5</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/zagruzit-brauzer-mazila-poslednyaya-versiya-format-factory-besplatnyi/"> <figure> <img src="/uploads/ad0f107008e65543bab6d14929c45700.jpg" width="288" height="160" alt="Format Factory - convertor gratuit Format Factory" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/zagruzit-brauzer-mazila-poslednyaya-versiya-format-factory-besplatnyi/">Format Factory - convertor gratuit Format Factory</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/nastroika-karty-nvidia-black-desert-optimizaciya-kompyutera-pod-igry-video-o-nastroike/"> <figure> <img src="/uploads/8d24e74541856d88eb44b1a7c198eff9.jpg" width="288" height="160" alt="Optimizarea computerului pentru jocuri" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/nastroika-karty-nvidia-black-desert-optimizaciya-kompyutera-pod-igry-video-o-nastroike/">Optimizarea computerului pentru jocuri</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/osobennosti-i-pravila-polnogo-klonirovaniya-dannyh-zhestkogo-diska-s-hdd-na/"> <figure> <img src="/uploads/2578c2e00c2967a1eb106ccfa347e57c.jpg" width="288" height="160" alt="Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/osobennosti-i-pravila-polnogo-klonirovaniya-dannyh-zhestkogo-diska-s-hdd-na/">Transferarea sistemului pe un SSD: instrucțiuni Clonarea unui disc pe un SSD Windows 10</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/karty-kak-poluchit-monety-macbain-v-icarus-karta-resursov---vse-lokacii-v/"> <figure> <img src="/uploads/d509f95b7d0e5fe74117ef4eff3fd13b.jpg" width="288" height="160" alt="Cum să obțineți monede MacBain pe harta resurselor Icarus - toate locațiile din Icarus" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/karty-kak-poluchit-monety-macbain-v-icarus-karta-resursov---vse-lokacii-v/">Cum să obțineți monede MacBain pe harta resurselor Icarus - toate locațiile din Icarus</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/skrinshot-tremya-palcami-miui-takzhe-vam-ponravyatsya/"> <figure> <img src="/uploads/09e0313a8a732b02827ba6d2579abcb5.jpg" width="288" height="160" alt="Captură de ecran cu trei degete miui" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/skrinshot-tremya-palcami-miui-takzhe-vam-ponravyatsya/">Captură de ecran cu trei degete miui</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/kak-zashchitit-smartfony-ot-virusov-i-shpionskogo-po-kak-zashchitit/"> <figure> <img src="/uploads/39d00118a52b8f2948f6e6b15d05eeee.jpg" width="288" height="160" alt="Cum să vă protejați telefonul de viruși" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/kak-zashchitit-smartfony-ot-virusov-i-shpionskogo-po-kak-zashchitit/">Cum să vă protejați telefonul de viruși</a> </div> </div> </li> <li class="col-lg-3 col-md-3 col-sm-4 col-xs-6"> <div class="quarters_left_in"> <a href="https://tractorillo.ru/ro/mozhno-li-ustanovit-vindovs-s-fleshki-ustanovka-operacionnoi/"> <figure> <img src="/uploads/9a04735a1059d6d456133f8efd276e34.jpg" width="288" height="160" alt="Instalarea unui sistem de operare de pe o unitate flash prin BIOS" class="img-responsive bordertop" data-pin-nopin="true" loading=lazy loading=lazy> </figure> </a> <div class="por_top"> <a href="https://tractorillo.ru/ro/mozhno-li-ustanovit-vindovs-s-fleshki-ustanovka-operacionnoi/">Instalarea unui sistem de operare de pe o unitate flash prin BIOS</a> </div> </div> </li> </ul> <div class="clearfix"></div> </div> <div class="clearfix"></div> </div> </div> </div> </section> <div class="footer_social "> <div class="container"> <div class="row"> <div class="social_left"> <a href="https://tractorillo.ru/ro/" title="Procesare imagini și video"> <figure> <img src="/img/logo.png" style='max-height:50px;max-width:300px;' alt="Procesare imagini și video" class="img-responsive" loading=lazy loading=lazy> </figure> </a> <ul> <li><a href="https://tractorillo.ru/ro/category/photoshop/">Photoshop</a></li> <li><a href="https://tractorillo.ru/ro/category/photoshop-lessons/">Lecții Photoshop</a></li> <li><a href="https://tractorillo.ru/ro/category/photo-effects/">Efecte foto</a></li> <li><a href="https://tractorillo.ru/ro/category/text-effects/">Efecte de text</a></li> <li><a href="https://tractorillo.ru/ro/category/photoshop-3d/">Photoshop 3D</a></li> </ul> <div class="clearfix"></div> </div> <div class="social_right"> <h4>Suntem pe rețelele de socializare</h4> <ul> <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://tractorillo.ru/putevoditel-po-internetu---vse-samoe-interesnoe-v-seti-ispolzovanie/" target="_blank" class="fb"><i class="fa fa-facebook" aria-hidden="true"></i></a></li> <li><a href="" target="_blank" class="square"><i class="fa fa-instagram" aria-hidden="true"></i></a></li> <li><a href="" target="_blank" class="pinte"><i class="fa fa-pinterest-p" aria-hidden="true"></i></a></li> <li><a href="https://www.twitter.com/share?url=https%3A%2F%2Ftractorillo.ru%2Fro%2Fputevoditel-po-internetu---vse-samoe-interesnoe-v-seti-ispolzovanie" target="_blank" class="twitt"><i class="fa fa-twitter" aria-hidden="true"></i></a></li> </ul> <div class="clearfix"></div> </div> </div> </div> </div> <footer> <div class="container"> <div class="row"> <div class="footer_left"> <p>© 2024 Procesare imagini și video</p> </div> <div class="footer_right"> <ul> <li><a href="" target="_blank" >Despre site</a></li> <li><a href="" target="_blank" >Publicitate</a></li> <li><a href="https://tractorillo.ru/ro/feedback/" target="_blank" >Contacte</a></li> </ul> </div> <div class="clearfix"></div> </div> </div> </footer> </div> <a id="back-to-top" href="#" class="btn btn-primary btn-lg back-to-top visible-md visible-lg"><i class="fa fa-chevron-up" aria-hidden="true"></i></a> <script> var cb = function() { var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = '/wp-content/themes/ctt-dicasdemulher/css/combined_css.css?test'; var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h); }; var raf = requestAnimationFrame || mozRequestAnimationFrame || webkitRequestAnimationFrame || msRequestAnimationFrame; if (raf) raf(cb); else window.addEventListener('load', cb); </script> <script type="text/javascript"> ; var be_css_defer = document.createElement("link"); be_css_defer.rel = "stylesheet"; be_css_defer.type = "text/css"; be_css_defer.href = "/wp-content/plugins/bwp-minify/min/?f=wp-content/plugins/contact-form-7/includes/css/styles.css&ver=12345"; document.getElementsByTagName("head")[0].appendChild(be_css_defer); </script> <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js?ver=3.6'></script> <script type='text/javascript'> var BJLL_options = { "threshold": "800" }; </script> <script type='text/javascript' src='https://tractorillo.ru/wp-content/plugins/bwp-minify/min/?f=wp-content/plugins/ajax-load-more/core/dist/js/ajax-load-more.min.js,wp-content/plugins/ajax-load-more-seo/js/alm-seo.js,wp-content/plugins/contact-form-7/includes/js/scripts.js,wp-content/plugins/bj-lazy-load/js/bj-lazy-load.min.js,wp-includes/js/wp-embed.min.js&ver=12345'></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript" src="https://tractorillo.ru/wp-content/themes/ctt-dicasdemulher/js/bootstrap.js"></script> <script type="text/javascript" src="https://tractorillo.ru/wp-content/themes/ctt-dicasdemulher/js/lazysizes.min.js"></script> <script type="text/javascript" src="https://tractorillo.ru/wp-content/themes/ctt-dicasdemulher/js/jquery.lockfixed.min.js"></script> <script type="text/javascript" src="https://tractorillo.ru/wp-content/themes/ctt-dicasdemulher/js/jquery-scrollbar.js"></script> <script type="text/javascript"> $('.envira-gallery-link').attr('onclick', 'javascript:void(0)'); $(document).ready(function(e) { // $('nav ul li.dropmenu').click(function(e) { // $(".drop").slideToggle(); // // } ); // handles the carousel thumbnails // when the carousel slides, auto update }); </script> <script> $(".wp-caption").removeAttr('style'); $('#Continuar').click(function() { $('.continuar').hide(); }); </script> </body> </html>