internetul Windows. Android

Folosind XML în mediul Delphi. Utilizarea modelului de obiect al documentului XML Crearea unui XML în clapa Delphi Xe

Bine ati venit! Acest blog este dedicat internetului și computerelor și, mai precis, ei i-au fost dedicați.

Probabil că este imediat văzut că mulți ani nu au apărut pe site de mulți ani. Da, aceasta este soarta celor mai multe bloguri. Odată ce acest proiect a fost o întreprindere ambițioasă, iar autorul, ca și în multe altele care au scris la acea vreme, au fost planuri pe scară largă de a deveni unul dintre cei mai buni bloggeri ruși. Ei bine, dacă priviți acum, apoi din aceste bloguri care au fost create simultan cu a mea, majoritatea s-au dizolvat deja în veșnicie. Și am devenit trinte de blog lipsă de timp. Deci, da, nu mai este actualizat. Deși am câștigat odată pe acest site în competiția pe blog 2011.

Chiar am avut ideea de a elimina toate astea, dar apoi am revizuit materialele vechi și am realizat că ar putea fi în continuare utile cititorilor. Da, unele articole sunt depășite (dacă am suficientă putere, vor primi mărcile corespunzătoare), dar site-ul, de exemplu, poate fi util pentru începători - aici puteți citi despre conceptele de bază ale Internetului, învățați să personalizați Internet, ferestre sau chiar decid să meargă la Linux. Așadar, uitați-vă la rubrici și selectați cel care este potrivit pentru dvs.

Și, la urma urmei, sper că este mai mult decât un blog, dar un adevărat ghid Internet. Site-ul poate fi găsit în modul director, unde toate articolele disponibile sunt structurate pe categorii. Și cine știe poate, noi articole de calitate vor începe să apară aici.

Sander.

Picodi.ru este un portal de reducere de la cupoanele internaționale, un expert polonez în economii și achiziții ieftine. Polonezii sunt considerați una dintre cele mai economice națiuni din lume, prin urmare, nu este surprinzător faptul că acest tip de proiect a crescut de la pornirea poloneză kodyrabitowe.pl. Ce poate fi util pentru acest portal unui utilizator de Internet obișnuit din Rusia?

Telefoanele moderne Android sunt mai mult decât telefoanele. Te obișnuiești cu setul de programe instalate, la istoricul apelurilor și mesajelor text, colecții de fotografii și multe. Dar timpul merge, iar dispozitivul complet aranjat începe să încetinească, să bug-o sau pur și simplu o viziune prezentabilă din cauza tăierii pe carcasă sau zgârieturi de pe ecran. Există o întrebare de a alege un nou telefon și schimbarea telefonului Android. Și dacă întrebarea de alegere, vom ocoli acum partidul acum, apoi "mișcarea" unui nou telefon rămâne o problemă serioasă - absolut nu vreau să încep toate datele de la zero. Aici vom vorbi despre asta astăzi.

Majoritatea cititorilor acestui blog, cel mai probabil, nu s-au confruntat cu versiuni de control al versiunii și nu vor veni în viitorul apropiat. Și scuze. Această invenție extrem de ușor de utilizat este utilizată pe scară largă de programatori, dar, în opinia mea, ar putea fi foarte utilă și celor care lucrează activ cu textele. Dar, probabil, nu există nici un sistem de control al versiunii acum, pe care ar fi ușor să începeți utilizarea pentru "Office" (Microsoft Office). Cu toate acestea, cred că materialul prezentat în articol poate fi interesant pentru toți cititorii.

Dacă v-ați gândit cum de la televizorul dvs. vizionați filme peste rețea și accesați Internetul, acest articol este pentru dvs. Nu, știu că unele televizoare au funcționalitatea televizorului inteligent, dar nu am văzut-o niciodată să funcționeze bine. Aparent, prin urmare, Google a demonstrat recent un dispozitiv complet uimitor, sa încheiat imediat cu o senzație. Vorbim despre Chromcast-ul Streamer Media (Chromkast), o versiune mai perfectă și mai accesibilă a jucătorului favorizat de anul trecut NEXUS Q.

Dongle Chromkast, dimensiunile care nu depășesc 2 inci, se conectează la portul HDMI al televizorului și vă permite să vă bucurați de vizionarea conținutului web de streaming. Pentru a controla streamer, puteți utiliza orice dispozitiv (Tablet, PC, Smartphone) bazat pe platforma de operare iOS, Windows, Android sau Mac OS.

Acest articol este dedicat dispozitivului de memorie al sistemului Android, probleme care pot apărea din cauza lipsei sale și cum să le rezolvăm. Eu însumi nu am avut cu mult timp în urmă că telefonul meu Android a început să emită în mod regulat mesaje despre o lipsă de memorie atunci când încearcă să stabilească o anumită aplicație. Ceea ce a fost foarte ciudat pentru mine, în ciuda faptului că, pe descrierea de pe piață, ar fi trebuit să fie aproximativ 16 GB și am crescut și acest volum utilizând o cartelă de memorie suplimentară. Cu toate acestea, problema a fost, și am trebuit să mai tinker înainte de a găsi soluția potrivită care nu necesită primirea accesului rădăcinii sau recuperarea completă a telefonului la starea din fabrică.

Recent, se acordă multă atenție construirii sistemelor de e-business sau, așa cum sunt numite și - B2B (Business to Business). Având în vedere recomandările privind construirea sistemelor de streaming de schimb de coordonare a tehnologiilor Internet ale corpului - WWW Consorțiul: accentul se face față de tehnologiile XML și construirea sistemelor de schimb de documente XML.

Avantajul utilizării XML în e-business este eficiența ridicată a sistemelor B2B la costuri reduse pentru crearea sa datorită unei reprezentări clare și vizuale a informațiilor structurate, capacitatea de a utiliza protocoale moderne de rețea și de a crea sisteme de afaceri în timp real.

Independența prezentării informațiilor sub formă de documente XML permite diferită, participarea la afacerile electronice, să producă independent unul de celălalt.

În toate sistemele, schimbul este de obicei construit de aceeași schemă utilizând cererile HTTP. Protocolul SSL este aplicat ca protocol SSL (dar acesta este un subiect separat).

Una dintre opțiunile posibile pentru procesarea mesajelor XML este construirea componentelor BIN / CGI (ISAPI) -News sau COM (server) care formează sau prelucrează documente XML.

Pe de o parte, aplicația acționează ca un client, care în modul post emite o interogare HTTP, pe de altă parte, este un server web din partea căruia este procesată procesarea interogării și un răspuns. Schimbul de informații utilizează documente XML.

Una dintre cele mai eficiente opțiuni de implementare este utilizarea unui parser XML existent care susține modelul DOM. Un astfel de parser este o ofertă distributivă de Win`98 sau o parte integrantă a IE 4,7 și mai sus (pentru Win`95) și reprezintă Serverul COM situat în biblioteca MSXML.DLL.

Modelul obiectului component (COM) este date încapsulate și metode într-o singură esență și o modalitate de a le accesa prin sistemul de interfață. Delphi este pur și simplu accesibil la accesul la clasele de obiecte com (mai multe clase pot fi incluse într-un singur server com). Accesul la obiecte se realizează prin inițializarea instanței de clasă prin intermediul sistemului de interfață. Descrierea interfețelor este realizată de limba de definire a interfeței (IDL), care este posibilă efectuarea automată a mijloacelor de mediu.

Delphi înseamnă importuri de la serverul COM msxml.dll.Fișierele de descriere a interfeței IDL sunt construite și fișierul de descriere binar al tipului bibliotecii este TLB. Această operație se efectuează prin meniul sistemului: Proiect | Introduceți importul bibliotecii:(Imaginea 1). Se afișează următoarea casetă de dialog (Figura 2), în care doriți să selectați un obiect COM (în cazul nostru, obiectul este înregistrat ca "Microsoft.xmldom (versiunea 2.0)") și creați un fișier TLB (buton Creați unitatea.). Folosind fișierul TLB, mediul generează descrierea fișierului "PASKALEVSKY" al serverului COM - MSXML_TLB.PAS

Fișierul MSXML_TLB.PAS descrie toate interfețele, constantele și serverele com.

Pentru accesul la obiectele elementului COM, este necesar în directivă Utilizări.adăugați numele fișierului de descriere a bibliotecii (MSXML_TLB.PAS). Mai jos este cel mai simplu program care utilizează DOM Standard MSXML.DLL Analyzer, care descarcă documentul XML și îl afișează în elementul memorator de text.

utilizări. Ferestre, mesaje, syutiluri, clase, grafică, controale, formulare, dialoguri, Oleserver, MSXML_TLB, STDCTRL; tip Tform1 \u003d. clasă(TForm) Button1: Tbutton; MEMO1: TMEMO; procedură. Buton1Click (expeditor: togject); Sfârșit; var. Forma1: tform1; implementare ($ R *dfm) Procedură.Tform1.button1Click (expeditor: togject); // Declarația de domiclă a obiectului Soklass; var.cODOC: CODOMDOCUMENT; // clasa, în concordanță cu interfața idomdocument; var.DOC: IXMLDOCUMENT; Începe. // crearea unei instanțe a obiectului de domiciliu; DOC: \u003d codoc.create; // apelați o metodă de mod al unei instanțe a obiectului de domiciliu; Doc.load ("date.xml"); // accesul la instanța de proprietate XML a obiectului de domiciliu; Memo1.text: \u003d doc.xml; sfârșit; sfârșit.

DOM concept - model de document obiect

Fiecare document XML este reprezentat ca un set de pluralitate de obiecte (clase), cu care este posibilă accesul la elemente individuale (câmpuri obiect). DOM - Interfața descrie accesul la obiecte simple de domstring sau de caractere sau elemente XML separate ale documentului: Domfragmentement, DomNode, Domelement.

Următoarele sunt cele mai importante proprietăți și metode ale xmldomdocumentului, XMLDOMNODE, XMLDOMNOdelist. Trebuie remarcat faptul că modelul MSXML.DLL XML analizor, MSXML.DLL XML analizor, prezentat mai jos, sunt utilizate de către analizorul MSXML.DLL XML decât consorțiul DOM aprobat de modelul W3C.

O descriere mai completă a obiectelor de interfață Dom pot fi găsite pe

Obiect Xmldomdocument.
Reprezintă nivelul superior al ierarhiei obiectului și conține metode de lucru cu un document: descărcările, analiza, crearea elementelor, atributelor, comentariilor în IT etc. .
Proprietăți
Async. Proprietate Identificarea modului curent de procesare
Parseerror. Returnează o referire la obiectul de procesare a erorilor XMLDOMPParseError
Activați - Dezactivați verificarea documentelor.
uRL. Returnează adresa URL a documentului
documentement Conține o referire la elementul rădăcină al documentului ca obiect xmldomemement.
Metode
Încărcarea (URL)
loadxml (xmlstring)
Încarcă un document XML
salvați (objtarget) Salvează documentul XML în fișier
abort. Întreruperea procesului de descărcare și procesare a documentului.
creațiTtribute (Nume) Creează un nou atribut cu numele specificat pentru elementul curent.
creațiNode (tip, nume, nume spaceuri) Creează un nod de tipul și titlul specificat
createLelement (eticheta) Creează un element de document cu numele specificat.
createTextNode (date) Creează text în interiorul documentului
gETELEMENTSBYTAGNAME (TAGNAME) Returnează un link la colecția de articole de documente cu numele specificat
nodefromid (Idstring) Element de căutare după identificator

Xmdomnode obiect.
XMLDOMNODE obiect care implementează interfața DOM de bază Nodul., Concepute pentru a manipula cu un nod separat al unui copac de documente. Proprietățile și metodele sale vă permit să primiți și să modificați informații complete despre nodul curent - tipul, numele, numele complet, conținutul său, o listă de elemente pentru copii etc.
Proprietăți
nodename, nume de bază. Returnează numele nodului curent.
prefix. Returnează prefixul spațiului de nume.
datatype. Definește tipul de conținut al nodului curent
nODTYPE, NODCETYESTRING. Returnează tipul nodului curent:
atribute. Returnează o listă de atribute ale nodului curent ca colecție XMLDOMNAMAPAP.
tEXT. Returnează conținutul suportului curent sub formă de text.
xML. Returnează reprezentarea XML a suportului actual.
nodevalue. Returnează conținutul nodului curent.
childnoduri. Returnează o listă de elemente pentru copii ca xmdomnodelist.
firstild, LastChild. Returnează primul / ultimul element copil
previoussibling, Nextsibling Returnează elementul anterior / următor de îngrijire medicală.
paragraful. Conține o referință la elementul părinte.
ownerdocument. Returnează indicatorul la documentul în care se află nodul curent.
Metode
apendchild (Newchild) Adăugați un nou element copil la nodul curent.
inserare (Newchild, Refkild) Introduce un nod copil, având-o în subtreza actuală "stânga" a nodului specificat de parametrul Refkild.
clonenode (adâncime) Creați o copie a elementului curent.
getTtribute.(Nume)
getTtributenode. (Nume)
sETATTRIBUTE (nume, valoare)
setTtributeNode (xmdomattribute)
Accesul la atribute (crearea, citirea, scrierea) obiectului. Nume - Numele atributului, valoarea - valoarea sa. Returnează valoarea obiectului xmdomattribute.
Înlocui (Newchild, Oldchild) removechild (Oldchild) Înlocuirea obiectului Oldchild al listei curente de filiale pe NewChild. Îndepărtarea obiectului Oldchild
sELECTNODES SELECTSINNDENDE (PATHERSTRING) Returnează obiectul Xmdomnodelist selectat de modelul de căutare sau de primul nod
transformanode (Styesheet)
transformnodetOfject (Stylesheet, OutsueObject)
Alocă o masă de stil pentru a susține nodul curent și returnează șirul - rezultatul procesării. O referință la obiectul DOMDocument este transmisă ca parametru, în care sunt localizate instrucțiunile XSL.

Folosind XML în afaceri.

Pentru o imagine mai clară, este necesară o explicație și de ce toate acestea sunt necesare pentru a înțelege cum funcționează:

Atunci când construim un sistem B2B sau corporativ ERP, atunci când organizați un schimb de informații de informații XML între întreprinderile sau ramurile Prom-I, un sistem informatic dovedit eficient este utilizat pe baza serverelor web disponibile pe protocoale HTTP.

Pe de o parte, aplicația acționează ca un client, care în modul post emite o interogare HTTP, pe de altă parte, serverul web este pe partea căreia cererea este procesată și răspunsul. Documentele XML sunt utilizate ca schimbări.

De exemplu, într-un simplu sistem ERP corporativ al programului contabil (contabilitate ACS), este necesar să se formeze o anumită cerere pentru o factură și să o transferați într-o ramură care are un depozit (depozit ACS). Arta este o setare similară a problemei la crearea unui B2B al sistemului, atunci când o întreprindere a solicită disponibilitatea produselor (face o comandă pentru cumpărare) de la furnizorul V.

Enterprise A și programul său acționează ca un client. Depozitul servește furnizorului în cine are un complex BD de depozit pe serverul SQL. Schimbul se efectuează printr-un furnizor de servere corporative V.

Mai jos este următorul algoritm tipic de schimb:


Figura 3.
  1. Intreprindere A.inițiază procesul A.(Ordinul de produse), care acționează ca un client web.
  2. Procesul A.generează un document XML (de exemplu, o factură) și o transmite ca o interogare POST HTTP la un server web furnizor de web V. ca URI - un identificator al aplicației de procesare este utilizat. URI poate fi același ca și pentru toate tipurile de documente sau individuale pentru fiecare tip. Totul depinde de structura serverului B2B (Web).
  3. Serverul Web analizează solicitarea și generează serverul Procesul B.Prin trecerea unui document XML ca parametru.
    Procesul din serverul web este pornit și procesat fie ca pagină ASP, CGI (ISAPI) - aplicație sau Java Sevrot (aplicația serverului)
  4. Procesul B.- generează o solicitare la serverul de baze de date SQL.
  5. Serverul SQL face operațiunile necesare în baza de date, formează răspunsul și îl returnează. Procesul B..
  6. Pe răspunsul de la serverul SQL Procesul B. Generează un document XML (răspuns) și îl permite ca un răspuns la cererea HTTP la aplicația client.
  7. În plus, în funcție de situația din partea clientului, se formează o nouă interogare HTTP, fie se încheie sesiunea.

Câteva cuvinte despre organizarea managementului documentelor.

Regula generală de dezvoltare a sistemului de schimb XML este:

  • in primul rand- dezvoltarea circuitului fluxului de documente electronice și structura acestora;
  • În al doilea rând- Dezvoltarea tabelelor de funcții ale proceselor (subprocese) adică. Ce funcție în legătură cu care documentul XML va implementa fiecare proces.

Fiecare document XML, ca un document HTML, ar trebui să fie alcătuit dintr-un antet de mesaje (deținut de informații) și un organism de mesaje (pentru interogarea aceste informații încadrate prin etichetarea pentru a răspunde la solicitare). Pentru ca documentul XML să fie format corect, este necesar pentru cele două componente ale "antetului" și "cererii" la etichete încadrate, de exemplu. Vizualizarea documentului standard este prezentată mai jos:

Titlul (Figura 4), spre deosebire de HTML al documentului, ar trebui să conțină diferite informații de serviciu, inclusiv informații despre tipul de proces cu transmitere și procesare a documentelor. Procesarea informațională a documentului este primită, adică. Partea semnificativă este încadrată de etichetă. Trebuie remarcat faptul că structura antetului ar trebui să fie unită pentru toate tipurile de documente.

Pentru procesul care rulează de către server, algoritmul de procesare este de preferință (dar nu este necesar) pentru a construi după cum urmează:


Figura 6.

Unele momente principale atunci când creați o parte client

După cum sa explicat deja, atunci când creați un document XML, utilizează reprezentarea sa sub forma unui model DOM. Mai jos este un exemplu al textului textului Delphi al programului XML MESAJ.

procedură.Tthread1.headRecreate (expeditor: togject); var. // Anunțul cursurilor este necesar pentru a crea CODOC: CODOMDOCUMENT; // obiect xmldomdocument. DOC: DOMDOCUMENT; R: ixmldomelement; Nod: Ixmldomelement; // domtext txt: ixmldomtext; // domattribute attr: ixmdomattribute; Începe. // Crearea documentului DOM DOC: \u003d codoc.create; Doc.set_async (fals); // documentul inițial inițiere DOM Doc.loadxml ("
"); // crearea de domelement (etichetă<Expeditor.>) Nod: \u003d Doc.Creeelement ("expeditor"); // crearea unui nod text " LLC "Typhoon"" TXT: \u003d Doc.CreateTextNode ("LLC" Typhoon "); // atribuirea unui nod<Expeditor.\u003e Valoare // nod text " LLC "Typhoon"" Node.appendandild (txt); // adăugarea unui element<Expeditor.\u003e În rădăcina documentului ca o filială R.appendandild (nod); <Din.> Nod: \u003d Doc.Creeelement ("de la"); Txt: \u003d doc.createtextnode ("http://tayfun.ru/xml/default.asp"); Node.appendandild (txt); R.appendandild (nod); // operațiuni similare pentru etichetă<La.> Nod: \u003d Doc.Creeelement ("la"); Txt: \u003d doc.createtextnode ("http://irbis.ru"); Node.appendandild (txt); R.appendandild (nod); // Creați Domelement () Nod: \u003d Doc.Creeelement ("Typedocument"); // crearea unui nod xmdomattribute ATT: \u003d doc.createattribute ("ID", "comandă"); // Node.appendandild (ATT); R.appendandild (nod); sfârșit;

Trebuie remarcat faptul că anunțarea codocului: Codomdocument și DOC: variabilă de domtocument, precum și crearea metodei de creare (doc: \u003d codoc.create;) se efectuează o dată. Declarația variabilei se află în secțiunea descrierii variabilelor globale și nu în procedura locală, așa cum a fost demonstrată pentru vizibilitate în acest exemplu (adică o variabilă globală a modulului de program de tip DOMDocument de tip).

Rezultatul programului de mai sus va fi antetul creat, în raport cu exemplul nostru al documentului XML: descris în Figura 5.


Figura 5.


Figura 6.

Principalul avantaj al transmiterii informațiilor sub formă de documente XML este că este posibil să se formeze un mesaj care utilizează structura independentă a tabelelor din DBMS atât pe partea primită, cât și pe partea transmisă. Folosind exemplul nostru, permiteți-i să fie obligați să transfere informații despre facturile întreprinderii A, de la DBMS-ul structurii prezentate în Figura 6

Pentru a forma un document XML care conține o factură, o cerere SQL construită inițial (interogare a) cu informații despre factură:

SELECTAȚI * De la factura_generală Unde Invoicenum \u003d Numar SELECTAȚIBunuri, quulitate, preț, Hz_Cod Din.Bunuri Unde Invoicenum \u003d Numar //: Num - parametrul care specifică numărul facturii.

Mai jos face parte din programul care formează corpul documentului XML:

procedură. TThread1.Databodycreate (expeditor: tobject); var. // clase și xmldomdocument // codoc: codomdocument; // trebuie să fie global, pentru întregul modul. // doc: domundocument; // anunțarea obiectelor de dmelement R: ixmldomelement; // Domelement; Nod, nod2: ixmldomelement; NODE3, NODE4: IXMLDMALEMENT; // domtext txt: ixmldomtext; Str: șir; // Număr de factură: Întreg; - Variabila globală - // Masching 987654 // Querya, Queryb: Şir; - variabila globală, // menținerea unei cereri de solicitare // Query - Cerere și informații generale privind factura // Queryb - interogare B Informații despre bunurile descrise în // Factura (a se vedea textul) Începe. Query.Close; // a se vedea pe textul "Cerere a" Query.text: \u003d querya; // Solicitați execuția Query.execsql; Query.open; // obține adresa elementului rădăcină R: \u003d doc.get_documentele; NODE2: \u003d Doc.Creeelement ("Solicitare"); // Creați Domelement (etichetă) Nod: \u003d Doc.Creeelement ("Factură"); // adăugarea unui element la rădăcină R.appendandild (NODE2); // adăugarea unui element în Nod2. Andendchild (nod); // Creați Domelement (etichetă) NODE3: \u003d Doc.Creeelement ("Depurture"); // adăugarea unui element în Nodul. Apendchild (NODE3); // Apel la câmpul "Deporture" STR: \u003d query.fieldbyname ("Depurture"). Asstring; // crearea unui nod text \u003d valoarea câmpului // valoarea de atribuire a nodului // nod text, Str. Variable Node.appendandild (txt); // operațiuni similare pentru etichetă , , // , // (DB "destinatar")) Nod: \u003d Doc.Creeelement ("Destinație"); // Numele câmpului de bază de date nu poate coincide cu numele STR: \u003d query.fieldbyname ("destinatar") .astring; // TAGA, în acest avantaj de utilizare Txt: \u003d doc.createtextnode (str); // interfață DOM înainte de DBMS având suportul interfeței XML, // tip Oracle 8i sau MS SQL 2000 Node.appendandild (txt); ... // Formarea unei cereri de specificație a mărfurilor // închide cererea de acces Query.Close; // Vedeți pe textul "Cerere în", informații. Despre produse Query.Text: \u003d queryb; // Atribuirea valorilor parametrilor Query.Params.asinteger: \u003d factoicenumber; // Solicitați execuția Query2.execsql; // deschiderea accesului la cererea datelor Query.open; // Creați Domelement (etichetă) NODE3: \u003d Doc.Creeelement ("IMEMS"); // adăugarea unui element în Nodul. Apendchild (NODE3); // ciclu pe toate solicitările in timp ce nu. Eof.Query. do. Începe nodul4: \u003d Doc.Creeelement ("Imem"); // adăugarea unui element în NODE3.APPENDDHILD (NODE4); // Generarea de date pentru etichetă STR: \u003d query.fieldbyname ("preț"). Asstring; Txt: \u003d doc.createtextnode (str); Node.appendandild (txt); ... // Operații similare pentru etichete , , sfârșit; sfârșit;

Ca urmare a acestei proceduri, se formează următorul text al documentului XML:


Metoda deschisă este utilizată pentru a forma o interogare. Ixmlhttprequest.:

procedură. Deschis (const bstrethod, - metoda Type \u003d "Post" Bstrurl, - adresă de server URL VaraSync, - Mod de comunicare asincron / sincron \u003d True Bstruser, - Nume de utilizator pentru autentificarea cuvintelor Bstrpass) - Parolă

Crearea unei părți de server din procesarea documentelor

După cum sa menționat mai devreme, prelucrarea cererii HTTP poate fi efectuată fie aplicații CGI, fie servlets Java. Opțiuni posibile pentru scrierea paginilor ASP. Dar, în acest caz, transmisia de date este posibilă numai prin "obțineți" folosind șirul de interogare. Deși prelucrarea HTTP a cererii de pagină ASP funcționează mai eficient decât aplicația CGI. Cu toate acestea, în opinia mea, fără nici o diferență, cum să procesăm și, mai important, să rezolvăm întrebarea - cum să construim un program de procesare și nu cu ce mijloace.

Dacă am revizuit o opțiune de formare a documentelor XML din capitolul anterior, atunci sarcina aplicației server este opusul documentelor XML. Mai jos face parte din programul care analizează documentul XML:

procedură.TThread1.Dataparsor (expeditor: tobject); var. // anunțarea obiectelor de dmelement R, fnod: ixmldomelement; Str, nume de fișier: șir; PARM: șir; // anunțul Soklass și Codocxml, codocxsl, codocresult: codomdocument; // obiect xmldomdocument. XMLDOC, XSLDOC, rezultat: domundocument; // httpstr: șir; - o variabilă globală care conține șirul interogării HTTP Începe. Xmldoc: \u003d codocxml.create; Xmldoc.loadxml (httpstr); // obține adresa elementului rădăcină R: \u003d doc.get_documentele; // obținerea valorii elementului FNODE: \u003d R.SELECTSINGLENOODE ("// Typedocument"); // obțineți o valoare de atribut id \u003d "comandă" Numele fișierului: \u003d FNODE.GETATTIBUTE ("ID"); // și formarea ordinului de nume de fișier.xsl Numele fișierului: \u003d Numele fișierului + ". XSL"; // Crearea unui document XSLDOC XsLdoc: \u003d codocxsl.create; Xsldoc.loadxml (numele fișierului); // Crearea unui document XMLDOC Rezultatdoc: \u003d codocresult.create; // setarea modului de procesare sincronă Rezultatdoc.set_async (fals); // Instalarea verificării debutare Rezultatdoc.validedonparaza: \u003d Adevărat; // colaps xmldoc de șablonul xsl Xmldoc.transformnoc, rezultat (xsldoc, rezultatdoc); // Str. Variabila este atribuită valorii textului // Document rezultat. Str: \u003d rezultatdoc.text; // Element de căutare FNODE: \u003d R.SELECTSINGLENOODE ("// Invoicenumber"); // și obținerea valorii elementului PARM: \u003d FNODE.Text; // închide cererea de acces Query.Close; Query.Text: \u003d str; // atribuirea valorii parametrului Interogare.Params.asstring: \u003d parm; // Solicitați execuția Query.execsql; sfârșit;

Întreaga gamă de parsare este de a aplica șablonul XSL, care este format pentru fiecare tip de document individual. Rezultatul analizei este șirul de interogare SQL. În consecință, execuția șirului de interogări generate de SQL va face schimbările necesare în DBMS.

Avantajul utilizării parsare prin șablon este, de asemenea, în faptul că se dovedește o anumită flexibilitate a datelor și se obține independența completă a funcționării algoritmului din codul programului. Mai jos este textul șablonului XSL utilizat pentru procesarea tipului de document.

Introduceți în valorile Tabreg (de la, la, Typeedoc, corp) (" ", "", "") Introduceți în mărfuri (invoicenumber, nume, preț, calitate) valori (": num", " ", "", " ")

Explicând exemplul de mai sus, trebuie remarcat faptul că utilizarea perechilor de etichete și este formală, deoarece După parsare, cel puțin un nod ar trebui să fie prezent în documentul XML rezultat. Metoda rezultatăDDoc.Text atribuie valoarea textului obținută în timpul analizei documentului XML rezultatdoc. În acest caz, valoarea este tot ceea ce perechile de etichete sunt încadrate și, adică Am format o cerere SQL.

O altă caracteristică a scrierii programului trebuie remarcat posibilitatea utilizării parametrului SQL : Num. Utilizarea parametrului vă permite să simplificați textul șablonului XSL. Definiție Valoarea elementelor corespunzătoare a nodurilor de documente XML se determină inițial selectarea denumirii nodului corespunzător, de exemplu:

Pe scurt despre XSL.

Abreviația XSL provine din limbajul de formatare a limbajului de stil de stil extensibil (date XML). Așa cum este clar din antetul limbii de stil (XSL) extensibile (XSL) este utilizat pentru formatarea datelor XML. Prin definirea W3C XSL este formată din două părți:

  • XSLT - transformarea XSL. Limba utilizată pentru a converti sau a forma (transforma) documentele XML. Astfel, folosind XSLT, putem obține diferite secțiuni de mai multe forme de date și date de prezentare a datelor.
  • Elemente de formatare. Aceste elemente includ toate elementele de design de date tipografice, după ce sunt procesate folosind XSL. Folosit numai pentru a forma pagini HTML.

Folosind XSLT, putem selecta datele din fișierul XML de care aveți nevoie și le puteți aranja în formularul pentru a oferi utilizatorului. De exemplu, în cazul nostru, am transformat datele XML ca interogare SQL. Aplicația clasică XSL este de obicei formatarea datelor ca pagini HTML sau o reprezentare rară sub formă de fișiere RTF.

Fișierul XSL descrie șablonul (șablon), conform căruia se va efectua conversia de date XML. Revenind la șabloanele XSL, următoarele elemente pot fi alocate în XSLT (directive):

Directiva XSL. descriere
xSL: Șabloane aplicabile Directiva, indicând aplicarea atributului de șabloane corespunzătoare SELECT \u003d "Nume șablon"
xSL: atribut. creează arborele de atribute și îl adaugă la elementul de ieșire, numele "Numele atributului", spațiul de nume - URI pe spațiul de nume (prefixul spațiului de nume)
xSL: șablon de apel cauzează un șablon, nume de atribut \u003d "URI pe șablon"
xSL: Alegeți.
xSL: Când.
xSL: Altfel.
efectuarea unei selecții după condiția XSL: Când expr \u003d "Calculul expresiei pe script",
limba \u003d "Nume de limbă"
test \u003d "expresie calculată"
xSL: Comentariu generează un comentariu asupra documentului de ieșire
xSL: Copie
xSL: copie-of-of
copiază nodul curent în sursa de ieșire sau inserează fragmentul documentului la nodul în care atributul selectat \u003d "numele nodului sursă"
xSL: element. creează un element de ieșire după nume, nume de atribut \u003d "nume element", namespace \u003d "URI referință la spațiul de nume"
xSL: pentru fiecare re-aplicați șablonul la toate nodurile listei de noduri, selectați atributul stabilește o listă de noduri.
xSL: Dacă. verificarea condițiilor este setată de atributul de testare ca expresie
xSL: Includeți include un șablon extern, atribut href \u003d "URI referință"
xSL: ieșire. specifică rezultatul de ieșire, atributul de metodă poate avea "XML", "HTML" sau "Text"
xSL: Param. specifică valoarea parametrului, numele "Numele parametrilor", selectați \u003d "Valoare"
xSL: instrucțiuni de procesare creează instrucțiuni pentru prelucrare, nume de atribut \u003d "Instrucțiuni de proces"
xSL: Sortare. sortează multe noduri, atribute Selectați \u003d "Nume nod", tip de date \u003d tip de date (text "" Număr "QNAME), Comandă \u003d Sortare Direcție (" Ascendent "|" Descendent ")
xSL: Stylesheet. definește documentul șablonului XSL, este elementul rădăcină pentru XSLT
xSL: șablon. specifică șablonul XSL, numele de prefixare al numelui URI la numele șablonului ", Match \u003d" Notă la nodul la care se aplică șablonul "
xSL: text. generează text în fluxul de ieșire, atributul de dezactivare-ieșire \u003d "da" sau "nu" indică capacitatea de a genera caractere ESC
xSL: valoarea-of introduce valoarea nodului selectat ca text, indicatorul Select \u003d "Pointer la nod" din care este luată valoarea
xSL: Variabila specifică valoarea limitelor variabile, a atributului de nume \u003d "Numele variabilei", selectați \u003d "Calculați valoarea variabilei"
xSL: cu-param aplică parametrul la șablon, numele Atribut Name \u003d "Numele parametrilor", selectați \u003d Exprimare pentru a calcula contextul curent, valoarea implicită "."

Concluzie

În concluzie, trebuie remarcat faptul că utilizarea parserului standard XML msxml.dll.nu este singurul mijloc de parsare și de creare a documentelor XML. De exemplu, pentru a crea documente XML pentru a utiliza efectiv componentele Tpageproduser.și Ttableproduser.. Dar acest articol subliniază doar amploarea și posibilitatea aplicării unui model DOM în practică.

Autorul va fi foarte recunoscător pentru feedback cu privire la relevanța subiectului, conținutul general, stilul de prezentare, precum și toate celelalte comentarii care vor contribui la îmbunătățirea în continuare a calității de a scrie o colecție de articole și eliberarea de cărți care acoperă subiectul părții practice a utilizării documentelor XML în comerțul electronic. Pentru mai multe informații despre partea practică a aplicării documentelor electronice, puteți învăța de la www.edocs.al.ru pe site-ul autorului, este de asemenea planificat să plasați texte și exemple sursă.

Limba XML este din ce în ce mai folosită pentru a stoca informații, împărtășind acest lucru între aplicații și noduri web. În multe aplicații, această limbă este utilizată ca stocare de bază a datelor în altele - la exportul și importul datelor XML. Din aceasta rezultă că este timpul ca dezvoltatorii să se gândească la modul de utilizare a datelor XML în propriile aplicații.

În acest articol, vom lua în considerare modelul de obiect al documentelor XML (DOM) și implementarea acestuia de către Microsoft - Microsoft XML DOM.

XML DOM este un model obiect care oferă obiectelor dezvoltatorului pentru a descărca și a procesa fișierele XML. Modelul de obiect constă din următoarele obiecte principale: Xmdomdocument, xmdomnodelist, xmdomnod, xmldomnamednodeap și xmldomparseError. Fiecare dintre aceste obiecte (cu excepția xmldomparseError) conține proprietăți și metode pentru a obține informații despre obiect, manipularea valorilor și structurii obiectului, precum și deplasarea de-a lungul structurii documentului XML.

Luați în considerare principalele obiecte ale XML DOM și dați mai multe exemple de utilizare a acestora în Borland Delphi.

Folosind XML Dom în Borland Delphi

Pentru a utiliza Microsoft XML DOM în aplicațiile Delphi, trebuie să conectați biblioteca de tip corespunzătoare la proiect. Pentru a face acest lucru, executăm proiectul Biblioteca de tip de import și în panoul de dialog de tip import, selectați Biblioteca Microsoft XML Versiunea 2.0 (versiunea 2.0), care este de obicei localizată în fișierul Windows \\ System \\ MSXML.DLL

După apăsarea butonului Creare unitate, se va crea modulul de interfață MSXML_TLB, care ne va permite să folosim obiectele XML DOM: DOMDOCUMENT, XMLDOCUMENT, XMLHTTRequest și un număr de alții implementați în biblioteca MSXML.DLL. Legătura cu modulul MSXML_TLB trebuie să fie listată în lista de utilizări.

XML DOM Dispozitiv.

Modelul obiectului de documente reprezintă un document XML sub forma unei structuri de arbori constând din ramuri. Interfețele software XML DOM permit aplicațiilor să navigheze pe copacul de documente și să manipuleze ramurile sale. Fiecare ramură poate avea un tip specific (DomNodeType), conform căruia se determină părintele și filialele. În majoritatea documentelor XML, puteți găsi ramuri ale elementului, atributelor și ramurilor de text. Atributele (atributele) sunt un tip special de ramură și nu sunt sucursale subsidiare. Pentru gestionarea atributelor, sunt utilizate metode speciale furnizate de obiectele XML DOM.

În plus față de implementarea interfețelor World World Web Recomandate (W3C), Microsoft XML DOM conține metode care suportă modele XSL, XSL, spații de nume și tipuri de date. De exemplu, metoda SelectNodes vă permite să utilizați sintaxa șabloanelor XSL (sintaxa modelului XSL) pentru a căuta ramuri la un anumit context, iar metoda Transformanode acceptă utilizarea XSL pentru a efectua transformări.

Testați documentul XML.

Ca exemplu de document XML, luați catalogul CD-ROM-ului muzical, care are următoarea structură:

Empire Burlesque. Bob Dylan. STATELE UNITE ALE AMERICII. Columbia. 10.90 1985 Ascunde inima ta. Bonnie Tylor. Regatul Unit. CBS înregistrări. 9.90 1988 ... Descătușează-mi inima. Joe Cocker. STATELE UNITE ALE AMERICII. Emi. 8.20 1987

Acum suntem gata să începem să luăm în considerare modelul de obiect XML DOM, familiarizarea cu care va începe cu obiectul Xmdomdocument.

Document XML - Obiect XMLDOMDOCUMENT

Lucrul cu documentul XML începe cu descărcarea sa. Pentru a face acest lucru, folosim metoda de încărcare care are doar un singur parametru care indică adresa URL a documentului descărcat. La descărcarea fișierelor de pe un disc local, este specificat numai numele complet al fișierului (fișierul: /// protocolul în acest caz poate fi omis). Dacă documentul XML este stocat ca șir, metoda LoadXML trebuie utilizată pentru a descărca un astfel de document.

Pentru a controla metoda de descărcare a unui document (sincron sau asincron), se utilizează proprietatea Async. În mod implicit, această proprietate este adevărată, indicând faptul că documentul este încărcat asincron și controlul este returnat la aplicație chiar și până când documentul este complet încărcat. În caz contrar, documentul este încărcat sincron și apoi trebuie să verificați valoarea proprietății ReadyState pentru a afla, documentul încărcat sau nu. De asemenea, puteți crea un handler de evenimente onRewayStatechange, care va primi controlul la schimbarea valorii proprietății ReadyState.

Mai jos este afișat cum să descărcați un document XML utilizând metoda de încărcare:

Utilizatori ... MSXML_TLB ... Procedură TForm1.button1Click (expeditor: TOGJECT); Var xmldoc: ixmldomdocument; Începe xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d fals; Xmldoc.load ('C: \\ Data \\ Data.xml'); // // aici este codul care manipulează // documentul XML și ramurile sale // xmldoc: \u003d nil; Sfârșit;

După încărcarea documentului, ne putem referi la proprietățile sale. Astfel, proprietatea nodename va conține valoarea #document, proprietatea NODCETYPESTRING este o valoare a documentului, proprietatea URL este dosarul: /// c: //datata.xml valoare.

Procesarea este o greșeală

De interes deosebit sunt proprietățile asociate procesului de procesare a documentului atunci când este încărcată. Astfel, proprietatea parseError returnează un obiect XMLDOMPARSEERERRORROR care conține informații despre erori care au apărut în timpul procesului de procesare.

Pentru a scrie un handler de eroare, puteți adăuga următorul cod:

Var xmlerror: ixmldomparseerror; ... xmldoc.load ('C: \\ Data \\ Data.xml'); Xmlerror: \u003d xmldoc.parseError; Dacă xmlerror.errorcode.<> 0 apoi / // Aici procesează eroarea // altceva memo1.lines.add (xmldoc.xml); ... xmldoc: \u003d nil;

Pentru a afla ce informații sunt returnate în caz de eroare, modificați următorul element de director:

Empire Burlesque. Bob Dylan. STATELE UNITE ALE AMERICII. Columbia. 10.90 1985

Îndepărtarea elementului de închidere În a doua linie:</p><p> <CD> <TITLE>Empire Burlesque. <ARTIST>Bob Dylan.</ARTIST> <COUNTRY>STATELE UNITE ALE AMERICII.</COUNTRY> <COMPANY>Columbia.</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Acum scrieți codul care returnează proprietățile obiectului XMLDOMPARIEERERRORROR:</p><p>Xmlerror: \u003d xmldoc.parseError; Dacă xmlerror.errorcode.<> 0 apoi cu xmlerror, memo11line începe adăugați ("fișier:" + adresa URL); Adăugați ("cod:" + Intosttr (codul error)); Adăugați ("Eroare:" + motiv); Adăugați ("text:" + srctext); Adăugați (Row: '+ Intosttr (linia)); Adăugați ("Poziție:" + INTTOSTR (LINEPOS)); Sfârșitul altceva memo1.lines.add (xmldoc.xml); Sfârșit;</p><p>Și să ne îndeplinim cererea. Ca rezultat, obținem următoarele informații despre erori.</p> <p>După cum se poate observa din exemplul de mai sus, informațiile returnate de obiectul XMLDOMPPARIEEROR sunt suficiente pentru a localiza eroarea și pentru a înțelege motivul apariției sale.</p> <p>Acum restaurați elementul de închidere <TITLE> În documentul nostru și continuați discuția despre XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> Accesul la copacul de documente</h2> <p>Pentru a accesa arborele de document, puteți obține elementul rădăcină și apoi treceți prin filialele sale sau puteți găsi o ramură specifică. În primul caz, obținem elementul rădăcină prin proprietatea Documentelement, care returnează un obiect de tip XMLDOMNODE. Mai jos este afișat cum să utilizați proprietatea documenteței pentru a obține conținutul fiecărui element copil:</p><p>VAR NODE: IXMLDOMNODE; Rădăcină: ixmldomelement; I: Integer; ... rădăcină: \u003d xmldoc.documentele; Pentru i: \u003d 0 la rădăcină.Childnoduri.Lend-1 Începeți nodul: \u003d root.Childnodes.Item [i]; Memo1.lines.add (nod.text); Sfârșit;</p><p>Pentru documentul nostru XML, primim următorul text.</p> <p>Dacă suntem interesați de un fel de ramură specifică sau de un nivel de ramură sub prima filială, putem folosi fie metoda nodfromid, fie metoda getelementytagname a obiectului Xmdomdocument.</p> <p>Metoda NodeFromid necesită specificarea unui identificator unic definit în schema XML sau definiția tipului de document (DTD) și returnează o sucursală cu acest identificator.</p> <p>Metoda GetelementByTagname necesită o indicație a unui șir cu un element specific (etichetă) și returnează toate ramurile cu acest element. Mai jos este afișat cum să utilizați această metodă pentru a găsi toți artiștii din directorul CD-ROM:</p><p>Noduri: IXMLDOMNOdelist; Nod: IXMLDOMNODE; ... noduri: \u003d xmldoc.getelementsbytagname ("artist"); Pentru i: \u003d 0 la noduri.Lang-1 începe nodul: \u003d noduri.Item [i]; Memo1.lines.add (nod.text); Sfârșit;</p><p>Pentru documentul nostru XML, vom obține următorul text.</p> <p>Rețineți că metoda XMDOMNODE SELECTNODES oferă o modalitate mai flexibilă de a accesa ramurile documentului. Dar despre ea este puțin mai mică.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> Document Sucursala - XMLDOMNODE obiect</h2> <p>Obiectul XMDOMNODE este o ramură de documente. Am întâlnit deja acest obiect atunci când a fost obținut elementul rădăcină al documentului:</p><p>Rădăcină: \u003d xmldoc.documentele;</p><p>Pentru a obține informații despre ramura documentului XML, puteți utiliza proprietățile obiectului XMDOMNODE (Tabelul 1).</p> <p>Pentru a accesa datele stocate în ramură, utilizați de obicei proprietatea NODEVALUE (disponibilă pentru atribute, ramuri text, comentarii, instrucțiuni pentru secțiunile de procesare și CDATA) sau proprietatea textului care returnează conținutul de text al sucursalei sau proprietatea NodeTeTeTevalue. Acesta din urmă, totuși, poate fi utilizat numai pentru ramuri cu elemente tipate.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3> Mutarea pe copacul documentului</h3> <p>Obiectul XMDOMNODE oferă o varietate de moduri de a trece prin arborele de documente. De exemplu, pentru a accesa ramura părinte, se utilizează proprietatea părintelui, accesul la ramurile pentru copii se efectuează prin proprietățile copiilor (tipul XMLDCHILD), primulchild și lastchild (tipul XMDOMNODE) \u200b\u200betc. Proprietatea de proprietate returnează un obiect xmldocument care identifică documentul XML în sine. Proprietățile de mai sus facilitează trecerea prin arborele de documente.</p> <p>Acum voi depăși toate ramurile documentului XML:</p><p>Rădăcină: \u003d xmldoc.documentele; Pentru i: \u003d 0 la rădăcină.Childnoduri.Lend-1 Începeți nodul: \u003d root.Childnodes.Item [i]; Dacă nodul.haschildnodes atunci getchilds (nod, 0); Sfârșit;</p><p>După cum sa menționat mai sus, obiectul SelectNodes XMDOMNODE oferă o modalitate mai flexibilă de a accesa ramurile documentului. În plus, există o metodă de selecție care returnează numai prima ramură a documentului. Ambele metode vă permit să specificați șabloanele XSL pentru a căuta sucursalele.</p> <p>Luați în considerare procesul de utilizare a metodei SelectNodes pentru a extrage toate ramurile care au o ramură CD și inflație.</p><p>Rădăcină: \u003d xmldoc.documentele; Noduri: \u003d root.SelectNodes ("CD / preț");</p><p>Colecția de noduri va fi plasată toate ramurile de CD-uri pentru prețul Switter. Discuția despre șabloanele XSL se va întoarce puțin mai târziu.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3> Manipularea de către sucursalele fiice</h3> <p>Pentru manipularea filialelor, putem folosi metodele obiectului XMDOMNODE (Tabelul 2).</p> <p>Pentru a șterge complet înregistrarea primului disc, trebuie să efectuați următorul cod:</p><p>Var xmldoc: ixmldomdocument; Rădăcină: IXMLDOMNODE; Nod: IXMLDOMNODE; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d fals; Xmldoc.load ('C: \\ Data \\ Data.xml'); // obțineți rădăcina elementului rădăcină: \u003d xmldoc.documentement; Nod: \u003d rădăcină; // eliminați prima filială NODE.Removechild (NODE.FIRSTCHILD);</p><p>Rețineți că, în acest exemplu, eliminăm prima filială. Cum să eliminați primul element al primei filiale, este prezentat mai jos:</p><p>Var xmldoc: ixmldomdocument; Rădăcină: IXMLDOMNODE; Nod: IXMLDOMNODE; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d fals; Xmldoc.load ('C: \\ Data \\ Data.xml'); // obțineți rădăcina elementului rădăcină: \u003d xmldoc.documentement; // și primul nod subsidiar: \u003d root.firstchild; // eliminați prima filială NODE.Removechild (NODE.FIRSTCHILD);</p><p>În exemplul de mai sus, nu am eliminat prima ramură. <CD>…</CD>, și primul element al sucursalei - <TITLE>….

Acum adăugați o nouă ramură. Mai jos este un cod care arată cum să adăugați o nouă înregistrare a CD-ROM-ului muzical:

VAR NEWNODE: IXMLDOMNODE; Copil: IXMLDOMNODE; ... // Creați o nouă ramură - Newnode: \u003d xmldoc.createnod (1, "CD", ''); // Adăugați element Copil: \u003d xmldoc.createnod (1, titlu ", ''); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // și a stabilit valoarea sa de copil.Text: \u003d "Pink Floyd '; // Adăugați element <ARTIST> Copil: \u003d xmldoc.createnod (1, "artist", ''); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // și să-și stabilească valoarea copilului .Text: \u003d "Divizia Bell"; // Adăugați element <COUNTRY> Copil: \u003d xmldoc.createnod (1, "țară", ''); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // și să-și stabilească valoarea copilului.Text: \u003d "Marea Britanie"; // Adăugați element <COMPANY> Copil: \u003d xmldoc.createnod (1, "companie", ''); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // și a stabilit valoarea copilului său .Text: \u003d 'EMI Records Ltd.'; // Adăugați element <PRICE>Copil: \u003d xmldoc.createnod (1, "preț", ''); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // să-și stabilească valoarea copilului.text: \u003d '11 .99 "; // Adăugați un element <YEAR> Copil: \u003d xmldoc.createnode (1, an ',' '); // Adăugați un element NEWNODE.APPENDEDCHILD (COPIL); // și să-și stabilească valoarea copilului .Text: \u003d '1994'; // și adăugați sucursala root.appendandild (Newnode); ...</p><p>Codul de mai sus arată următoarea secvență de acțiuni pentru a adăuga o nouă ramură:</p> <ul><li>Crearea unei noi ramuri utilizând CreateNode: <ul><li>crearea unui element utilizând metoda CreateNode;</li> <li>adăugând un element la ramură prin metoda Apendchild;</li> <li>stabilirea valorii elementului prin proprietatea textului;</li> <li>... repetați pentru toate elementele.</li> </ul></li> <li>Adăugând o nouă sucursală la document de către Apendchild.</li> </ul><p>Amintiți-vă că metoda Apendchild adaugă o ramură la capătul unui copac. Pentru a adăuga o ramură la un anumit loc al copacului, trebuie să utilizați metoda Introducere.</p> <h2> Set de ramuri - Obiect Xmdomnodelist</h2> <p>Obiectul Xmlnodelist conține o listă de ramuri care pot fi construite folosind metodele de selectare sau getelementsbytagname și sunt obținute și de la proprietatea Childnodes.</p> <p>Am considerat deja utilizarea acestui obiect în exemplul dat în secțiunea "Mutarea pe copacul documentului". Aici oferim și câteva comentarii teoretice.</p> <p>Numărul de ramuri din listă poate fi obținut ca valoare a proprietății de lungime. Ramurile au indici de la 0 la lungime-1, iar fiecare ramură individuală este disponibilă printr-un element de bază cu indicele corespunzător.</p> <p>Mutarea pe lista de ramuri poate fi efectuată, de asemenea, utilizând metoda NextNode returând următoarea ramură din listă sau Nil, dacă ramura actuală este aceasta din urmă. Pentru a reveni la partea de sus a listei, trebuie să apelați metoda de resetare.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> Crearea și salvarea documentelor</h2> <p>Deci, ne-am uitat la modul în care puteți adăuga ramuri și elemente la documentele XML existente. Acum creați un document XML "în zbor". În primul rând, vă vom reaminti că documentul poate fi încărcat nu numai de la adresa URL, ci și din șirul obișnuit. Mai jos este arătat cum să creați un element rădăcină, care poate fi utilizat pentru a construi dinamic elementele rămase (pe care le-am luat deja în considerare în secțiunea "Manipularea filialelor"):</p><p>Var xmldoc: ixmldomdocument; Rădăcină: IXMLDOMNODE; Nod: IXMLDOMNODE; S: Sterge; ... s: \u003d ' <CATALOG></CATALOG>"; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d fals; Xmldoc.loadxml (e); Rădăcină: \u003d xmldoc.documentele; Nod: \u003d xmldoc.createnode (1, "cd", ''); Root.appendandild (nod); Memo1.lines.add (xmldoc.xml); ... xmldoc: \u003d nil;</p><p>După construirea unui document XML, salvați-l în fișier utilizând metoda de salvare. De exemplu:</p> <p>Xmldoc.save ('C: \\ Data \\ Newcd.xml');</p> <p>În plus față de salvarea în fișier, metoda de salvare vă permite să salvați un document XML într-un obiect nou XMDOMDOCUMENT. În acest caz, documentul este procesarea completă și, ca rezultat, verificând structura și sintaxa sa. Mai jos este afișat cum să salvați un document într-un alt obiect:</p><p>Procedură tform1.button2Click (expeditor: togject); Var xmldoc2: ixmldomdocument; Începe xmldoc2: \u003d codomdocument.create; Xmldoc.save (xmldoc2); Memo2.lines.add (xmldoc2.xml); ... xmldoc2: \u003d nil; Sfârșit;</p><p>În concluzie, menționăm că metoda de salvare vă permite, de asemenea, să salvați un document XML altor obiecte com care suportă interfețele Istem, IsetStream sau Ipesciststreaminit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> Utilizarea șabloanelor XSL.</h2> <p>Discutarea metodei XMDOMNODE obiect SelectNodes, am menționat că oferă o modalitate mai flexibilă de a accesa ramurile documentului. Flexibilitatea constă în faptul că, ca un criteriu pentru a selecta ramuri, puteți specifica un șablon XSL. Astfel de șabloane oferă un mecanism puternic pentru a căuta informații în documentele XML. De exemplu, pentru a obține o listă a tuturor numelor de muzică CD-ROM în directorul nostru, puteți urma următoarea interogare:</p><p>Pentru a afla dacă discurile pe care artiști sunt eliberați în Statele Unite, cererea este formată după cum urmează:</p><p>Noduri: \u003d root.SelectNodes ("CD / artist");</p><p>Mai jos este afișat cum să găsiți primul disc din director:</p><p>Noduri: \u003d root.SelectNodes ('CD / Titlu ");</p><p>Și ultima:</p><p>Noduri: \u003d root.SelectNodes ('CD / Titlu ");</p><p>Pentru a găsi discurile lui Bob Dilan, puteți efectua următoarea interogare:</p><p>Noduri: \u003d root.SelectNodes ('CD [$ Orice $ ARST \u003d "BOB DYLAN" / TITLU ");</p><p>Și pentru a obține o listă de discuri eliberate după 1985, efectuăm următoarea interogare:</p><p>Noduri: \u003d root.SelectNodes ('CD / Titlu ");</p><p>O discuție mai detaliată a sintaxei XSL necesită o publicație separată. Pentru a intriga cititorii și a împinge cercetări ulterioare, voi da doar un mic exemplu de utilizare posibilă a XSL. Să presupunem că trebuie să convertim directorul la masa HTML obișnuită. Profitând de căi tradiționale, trebuie să rezolvăm toate ramurile de copaci și pentru fiecare articol obținut pentru a forma etichetele corespunzătoare <TD>…</TD>.</p> <p>Folosind XSL, creăm pur și simplu un șablon (sau un tabel de stil), în care indicăm ce și cum să convertesc. Apoi, impunem acest șablon catalogului nostru și gata: înainte de noi textul șablonului XSL, care convertește directorul din tabel (listarea 2).</p> <p>Codul pentru suprapunerea șablonului XSL în catalogul nostru arată astfel:</p><p>Procedură tform1.button2Click (expeditor: togject); VAR XSLDOC: IXMLDOMDOCUMENT; Începe xsldoc: \u003d codomdocument.create; XsLdoc.load ('C: \\ Data \\ Data.xsl'); Memo2.text: \u003d xmldoc.transformnod (xsLDOC); XSLDOC: \u003d NIL; Sfârșit;</p><p>Prin completarea discuției noastre despre XSL, trebuie spus că în prezent această limbă este utilizată în mod activ pentru transformarea diferitelor documente XML, precum și pentru formatarea documentelor.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2> Concluzie</h2> <p>Din motive destul de ușor de înțeles, într-un articol este imposibil să luați în considerare toate obiectele Microsoft XML DOM și să aducem exemple de utilizare a acestora. Aici am atins doar problemele principale ale utilizării XML DOM în aplicații. În fila. 3 prezintă toate obiectele implementate în Microsoft XML DOM.</p> <p>Computer Press 12 "2000</p> <p>Ordinul de rezolvare a sarcinilor pe Delphi <br> Delphi este al doilea limbaj de programare cu care elevii se familiarizează cel mai adesea în procesul de învățare. Acesta este începutul programării orientate pe obiecte. Eu, ca student, făcându-mi concluzia că nu există o metodă mai ușoară de a stăpâni limba decât să scrie un calculator pe el. Chiar dacă realizați funcția elementară a adăugării a două numere, aceasta este deja pe o mulțime de lumină.</p> <p>Codegaear, Delphi 7, Lazarus este compilatoare diferite, programe care vor fi transferate codului mașinii scrise de dvs., transformându-l în Zoliki și unul. Acestea sunt toate programele pentru crearea de programe și nu limbi de programare separate. Acești compilatori folosesc limbajul de programare Pascal Pascal care stă la baza limbajului Delphi, care este similar cu sintaxa similară cu cea obișnuită Pascal, dar este funcțională semnificativ diferită. <br></p> <h2>Ce este sintaxa limbajului de programare?</h2> <p>Acesta este un format pentru scrierea diferiților operatori. De exemplu, ciclul "FOR" de pe Pascal are următorul format: "Pentru N: \u003d 1 până la k", etc.</p><p>În limba de programare C ++, același ciclu este scris oarecum diferit: pentru (n \u003d 1, n, scriem un calculator</p><p>Acest lucru vă va oferi să înțelegeți modul în care obiectele cu codul programului interacționează, ceea ce este "variabilele", modul în care funcționează funcțiile matematice. Toate programarea în orice caz va fi un calcul. Jocul este, de asemenea, un program care consideră în mod constant ceva, funcționează cu numere și funcții numerice. Programarea este inseparabilă de matematică.</p> <p>Folosim pentru a scrie mediul de dezvoltare Lazarus. Funcționalitatea sa nu este la fel de bogată ca, de exemplu, codegar, dar este acces liber și este conceput pentru a studia.</p><p>Deschiderea mediului de dezvoltare, vedem forma și panoul elementelor. Iată un formular.</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 elementului.</p><p>Primul lucru pe care îl vom face este să adăugați cele trei elemente pe care trebuie să le implementați funcția de adăugare a două numere. Avem nevoie de: "TEDIT" în numărul de trei bucăți și "tbutton". În imaginea de mai jos, ele sunt afișate în panoul săgeți. Faceți clic pe ele o dată, apoi o dată în formă și ele apar pe ea.</p><p>Acestea sunt câmpuri de text pentru intrare și un buton regulat. Întâlniți aceste elemente folosind aproape orice program Windows. Aruncați o privire.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Acum curățați aceste inscripții. Faceți clic pe fila Vizualizare. Și faceți clic pe "Inspectorul obiectelor. Această fereastră va apărea.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>Faceți clic o dată pe elementul nostru "buton" din formular și modificați valoarea "Caption" în fereastra Inspector la oricare altul. De exemplu, pe cuvântul "OK". Faceți clic pe Enter. Vedem pe formular, deoarece elementul a schimbat numele.</p><p>Doar fă-o cu editare, doar nu redenumiți, dar le vom face fără niciun conținut. Îl subliniez la rândul său și curăță valoarea textului în 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>Conform rezultatului, forma noastră arată așa.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-30.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Acum că calculatorul nostru a câștigat, trebuie să înregistrați codul software necesar pentru procedura butonului nostru. Faceți clic pe elementul buton de două ori și deschideți editorul sursă.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-31.jpg' width="100%" loading=lazy loading=lazy></p><p>Vedea? Buton1Click Procedură. Aceasta este o procedură care este responsabilă pentru ceea ce se întâmplă când facem clic pe buton o dată. Și trebuie să apară următoarele: Programul este necesar în al treilea editant pentru a ne aduce suma numerelor introduse în primele două domenii. Noi scriem codul.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-32.jpg' width="100%" loading=lazy loading=lazy></p><p>Astfel de 5 linii de coduri de cod pe care trebuie să le scriem. Comentariile și explicațiile sunt vizibile în imaginea de mai sus. După aceea, faceți clic pe acest buton.</p> <p>O compilație a proiectului nostru va fi compilată. Acesta va fi asamblat în program. Introducem numerele din primele două câmpuri, faceți clic pe buton și obțineți 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 "Salvați totul", selectați dosarul pentru a salva și veți avea un program cu drepturi depline, începutul căruia se poate face de pe desktop. Acum încercați să vă dați seama pe cont propriu că trebuie să rescrieți în acest cod, astfel încât programul să fie împărțit la două numere și nu este îndoit. Sfat: Trebuie să modificați tipul de date. Videoclipul de mai jos prezintă un exemplu similar, dar în Delphi 7, nu Lazarus.</p><p><span class="6qR5tjJKK3g"></span></p> <p>Mulți programatori Delphi, setările de economisire sunt asociate utilizând <i>INI.</i> Fișiere în programele lor. Utilizarea acestei metode, în proiecte mai puțin grave, este necesar să se evite, deoarece limitează flexibilitatea, care împiedică extinderea în continuare a programului. Merită să spunem că o astfel de abordare este destul de populară, datorită ușurinței sale de utilizare și prezenței fondurilor încorporate în mediul de dezvoltare. <br><br> Cu toate acestea, opțiunea ideală pentru stocarea setărilor programului este structurată <i>XML.</i> Fișiere. Avantajul lor este că numărul de parametri nu poate fi fixat. Pentru a înțelege mai bine acest lucru, luați în considerare un exemplu specific.</p><p>În programul Utilizare, când faceți clic pe Înregistrare, apare un meniu contextual, care afișează lista punctelor. Aceste elemente sunt comenzi care la rândul lor sunt descărcate din fișierul de setări. În cazul în care se păstrează setările în <i>INI.</i> Fișierul, programul ar putea salva și încărca un anumit număr de comenzi, de exemplu 10 sau 50. De îndată ce aveți nevoie mai important, va trebui să rescrieți codul și, în consecință, să-l re-compilați.</p><p><img src='https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.ini_.jpg' height="145" width="247" loading=lazy loading=lazy><br> Aplicând o abordare folosind <i>XML.</i> Fișiere, vom avea capacitatea de a descărca dinamic toți parametrii secțiunii. Pentru toate acestea, fișierul de configurare va deveni mai elegant, fără numerotarea excesivă a parametrilor. Cu toate acestea, instrumentele standard pentru a lucra cu <i>XML.</i> Delphi are multe dezavantaje, așa că vă recomand să utilizați biblioteca standard <b>MSXML.</b>. De obicei, este partea implicită a sistemelor de familie Windows.</p><p><img src='https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.xml_.jpg' align="center" width="100%" loading=lazy loading=lazy><br> Pentru conectare <b>MSXML.</b>Trebuie să formăm un fișier de interfață cu o listă a tuturor funcțiilor prin importul de pe serverul COM. Cum să importați interfața este scrisă nu există suficiente articole detaliate, vă sugerez să descărcați fișierul <b>Msxml2_tlb.pas.</b> Deja gata de utilizare. După ce fișierul este descărcat, plasați-l lângă proiectul dvs. sau aruncați în dosarul Delphi Lib lib. Astfel, toate programele create vor putea utiliza modulul. <b>MSXML.</b>, Este suficient să adăugați MSXML2_TLB la utilizări.</p><p>Pentru claritate, luați în considerare următorul exemplu al aplicării acestei biblioteci:</p><p>Procedură LoadData; VAR XMLDOC: DOMDOCUMENT; Rădăcină: ixmldomelement; Începe xmldoc: \u003d codomdocument.create; Xmldoc.load ("settins.xml"); Rădăcină: \u003d xmldoc.documentele; Showmessage ("dimensiune / lățime"). Text); Rădăcină: \u003d Nil; Xmldoc: \u003d nil; Sfârșit;</p><p>În primul rând, este creat o instanță a clasei de domiciliu, după care conținutul fișierului Setări.xml este încărcat în memorie. Ca în conformitate cu standardul oricăror <i>XML.</i> Fișierul trebuie să conțină eticheta rădăcină (în acest caz <i>config.</i>), atunci trebuie să o folosim folosind funcția <i>Documentement</i>. Apoi conținutul conținutului între etichete <width></width> care la rândul lor sunt între etichete <size></size> . Astfel, din fișierul Setări.xml, metoda noastră va implementa text în casebox <i>"100px"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500px.</height> <width>100px.</width> </size> </config> </p><p>Aici se aplică metoda SELECTSINGLENDENDE, care ia șirul ca parametru.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast?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> </article> <div class="post-bottom"> <div class="post-share"> <script src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script> <script src="//yastatic.net/share2/share.js"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir" data-counter=""></div> </div> </div> <div class='yarpp-related'> <div class="related-items"> <div class="headline">Nu a găsit un răspuns la întrebarea dvs.? Uita-te aici</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://totrdlo.ru/ro/registraciya-lichnoi-stranicy-v-socialnoi-seti-facebook-kak-obedinit-dve-uchetnye.html"><img src="/uploads/3283d29449f6fcf31e7b8c7f3a8f6779.jpg" width="120" height="120" alt="Cum să combinați două conturi pe Facebook?" class="related-item__image" / loading=lazy loading=lazy>Cum să combinați două conturi pe Facebook?</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://totrdlo.ru/ro/kak-v-vorde-delat-ramki-krasivye-skachivaem-i-vstavlyaem-krasivye-ramki-v.html"><img src="/uploads/fd38b064f444ed23c0ccb9be68fc25ad.jpg" width="120" height="120" alt="Descărcați și introduceți un cadru frumos către documentul Word" class="related-item__image" / loading=lazy loading=lazy>Descărcați și introduceți un cadru frumos către documentul Word</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://totrdlo.ru/ro/clock-watchdog-timeout-windows-10-chto-delat-kak-ispravit-oshibki-clock-watchdog-timeout-tipa-sinii.html"><img src="/uploads/418be8351eeee7a32bc2c905fc8ed975.jpg" width="120" height="120" alt="Cum să remediați erorile de tip ceas_watchdog_timeout"синий экран" (0x00000101)" class="related-item__image" / loading=lazy loading=lazy>Cum de a repara ceasul_watchdog_timeout tip "albastru ecran" (0x00000101)</a> <div class="related-item__comments"><span></span></div> </div> </div> </div> </div> <div style="text-align: center; margin-top: 15px; margin-bottom: 15px; " id="vanna-1965575812"><div class="adsense"><script type="text/javascript">ga_1();</script></div></div> </main> <aside class="sidebar"> <div class="advices" data-theme="vannapedia_v.3"> <div class="headline"></div> <div class="advices-content"> <img src="/uploads/e819878f778f58eec8fa5da1561c1952.jpg" width="120" height="120" alt="Intel Core i5 4590 Recenzii de procesor" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://totrdlo.ru/ro/processor-intel-core-i5-4590-otzyvy-obem-kesh-pamyati-l3-mb.html">Intel Core i5 4590 Recenzii de procesor</a></div> </div> </div> <div class="vk-widget" id="text-3"> <div class="textwidget"><script type="text/javascript" src="//vk.com/js/api/openapi.js?130"></script> <div id="vk_groups"></div> </div> </div> <div class="sidebar-questions"> <div class="headline">Nou</div> <ul> <li><a href="https://totrdlo.ru/ro/chto-delat-esli-chernyi-ekran-chernyi-ekran-pri-vklyuchenii.html" >Ecranul negru când porniți computerul</a></li> <li><a href="https://totrdlo.ru/ro/kak-zablokirovat-programme-dostup-v-internet-kak-zablokirovat.html" >Cum să blocați corect programele de acces pe Internet?</a></li> <li><a href="https://totrdlo.ru/ro/cherneet-ekran-chernyi-ekran-pri-vklyuchenii-kompyutera-chto.html" >Ecranul negru când porniți computerul?</a></li> <li><a href="https://totrdlo.ru/ro/nastroika-mach3-pod-vash-stanok-bazovaya-nastroika-mach3-pereklyuchit-yazyk-na-match.html" >Limba de comutare de bază de configurare Mach3 pe \u200b\u200bmeciul 3</a></li> <li><a href="https://totrdlo.ru/ro/pochemu-net-zvuka-v-dinamikah-kompyutera-pochemu-ne-rabotaet-zvuk-na.html" >De ce sunetul nu funcționează pe computer cum să remedieze problema</a></li> <li><a href="https://totrdlo.ru/ro/kak-nachertit-diagrammu-v-vorde-stroim-grafiki-i-diagrammy-v-ms-word-diagramma.html" >Construiți grafice și diagrame în MS Word</a></li> </ul> </div> <div class="section"> </div> <div class="section"> <div class="headline">Articole populare</div> <ul class="sidebar-posts"> <li><a href="https://totrdlo.ru/ro/anime-fony-dlya-yandeks-brauzera-zhivye-upravlenie-temami-v-yandeks.html"><img src="/uploads/a7fbccd6efc443dd82be7ccfadade707.jpg" width="80" height="80" alt="Gestionarea temelor în Yandex" / loading=lazy loading=lazy>Gestionarea temelor în Yandex</a></li> <li><a href="https://totrdlo.ru/ro/post-i-get-zaprosy-prostymi-slovami-kak-otpravit-post-zapros-iz-brauzera-metod.html"><img src="/uploads/b37483beedf1144b2ca10b1603f4d78c.jpg" width="80" height="80" alt="Cum se trimite browser-ul de solicitare Post: Metodă Postare variabilă Post în exemplele de utilizare PHP" / loading=lazy loading=lazy>Cum se trimite browser-ul de solicitare Post: Metodă Postare variabilă Post în exemplele de utilizare PHP</a></li> <li><a href="https://totrdlo.ru/ro/kakie-sistemnye-trebovaniya-igry-cs-go-optimalnyi-komp-dlya.html"><img src="/uploads/ba7b6a9d8273cc696c1be7825f6e3e6c.jpg" width="80" height="80" alt="Calculator optim pentru COP care computer pentru CS merge" / loading=lazy loading=lazy>Calculator optim pentru COP care computer pentru CS merge</a></li> </ul> </div> <div class="section"> <div class="headline">Nou pe site</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://totrdlo.ru/ro/optimalnyi-komp-dlya-ks-go-kompyuter-dlya-cs-go-sistema-na-kotoroi-ks-go-ne.html">Calculator optim pentru COP</a></li> <li><a href="https://totrdlo.ru/ro/ispolzovanie-xml-v-srede-delphi-ispolzovanie-xml-document-object-model-sozdanie-xml-v.html">Utilizarea modelului de obiect al documentului XML Crearea unui XML în clapa Delphi Xe</a></li> <li><a href="https://totrdlo.ru/ro/kak-ubrat-oshibku-scenariya-v-windows-kak-ispravlyat-svoi-oshibki.html">Cum de a corecta greșelile dvs. Cum de a repara toate erorile laptopului</a></li> <li><a href="https://totrdlo.ru/ro/migaet-bukva-s-na-printere-ustranyaem-oshibki-esli-printer.html">Eliminați erorile dacă imprimanta nu vrea să tipăriți</a></li> <li><a href="https://totrdlo.ru/ro/kak-ubrat-oshibku-scenariya-v-windows-ispravlyaem-oshibki-v-rabote-windows-kak.html">Corect Windows în Windows Cum să scapi de erorile de calculator</a></li> </ul> </div> </aside> </div> <footer class="footer"> <nav class="footer__nav"><ul><li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1219"><a href="https://totrdlo.ru/ro/">Nou</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/ustranenie-nepoladok-zablokirovannyh-ustanovok-i-udalenii-net.html">Depanarea instalațiilor și ștergerilor blocate</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/modul-chisla-v-eksele-summirovanie-po-modulyu-v-excel-alternativnye.html">Modul de sumare în Excel</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/administrator-windows-zaproshennaya-operaciya-trebuet-povysheniya-administrator.html">Operația solicitată necesită o creștere</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/zakrepit-stroku-v-word-zakreplyaem-zakreplenie-paneli-instrumentov-v-word-vklyuchenie.html">Fixați bara de instrumente în cuvânt</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1230"><a href="https://totrdlo.ru/ro/">Popular</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/zakrepit-tablicu-v-word-zakreplenie-paneli-instrumentov-v-word-vklyuchenie-otdelnyh.html">Fixați bara de instrumente în cuvânt</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/ne-udalyaetsya-stranica-v-word-kak-v-programme-word-udalyat-stranicy.html">Ca în programul Word pentru ștergerea paginilor</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/pochemu-poyavlyaetsya-sinii-ekran-na-windows-7-sinii-ekran-smerti-bsod-boremsya.html">Ecranul de moarte albastră (BSOD) - Ne luptăm cu erorile</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/smenit-imya-vkontakte-bez-proverki-kak-pomenyat-imya-i-familiyu-v.html">Cum de a schimba numele și prenumele la VK</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/vklyuchaetsya-noutbuk-acer-aspire-v3-571g-ne-vklyuchaetsya-noutbuk-acer-sbros.html">Nu este inclus laptop Acer</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/rabochaya-klaviatura-ne-rabotaet-ustanovka-draivera-s-diska-otkazyvaetsya.html">Instalarea driverului de pe disc</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/moshchnye-igrovye-pk-moshchnye-igrovye-pk-kak-sobrat-igrovoi-komp-za-100000.html">PC-uri puternice de jocuri Cum de a asambla un computer de jocuri pentru 100.000</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/devil-may-cry-vyletaet-ne-zapuskaetsya-dmc-tormozit-igra-vyletaet-glyuchit-reshenie-samyh-rasprostra.html">Diavolul poate plânge accidentele. Nu începe DMC? Inhibă jocul? Se blochează? Buggy? Rezolvarea celor mai frecvente probleme. După fiecare misiune în DMC: Diavolul poate plânge problemele cu transferul contului pentru liste de lideri</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1236"><a href="https://totrdlo.ru/ro/">Recomandat</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/dyablo-3-zavisaet-vo-vremya-igry-ne-zapuskaetsya-diablo-iii-tormozit-igra-vyletaet.html">Nu începe Diablo III?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/kak-proverit-kompyuter-na-sledyashchie-programmy-kak-proverit-kompyuter-na.html">Cum să verificați computerul la spyware</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/kak-naiti-programmu-slezheniya-na-kompyutere-shpionskie.html">Spyware pe computer</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/chto-delat-esli-mass-effect-3-vyletaet-pri-zapuske-mass-effect-ne-zapuskaetsya.html">Efectul de masă nu începe: rezolvarea problemelor</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/reshenie-samyh-rasprostranennyh-problem-ne-zapuskaetsya-the-saboteur.html">Are Saboteur?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/pochemu-kompyuter-shch-lkaet-prichiny-po-kotorym-shchelkaet-zhestkii.html">Motivele pentru care hard diskul face clic și soluția lor de făcut atunci când faceți clic pe unitatea de sistem</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/deadfall-adventures-kak-sdelat-polnoekrannyi-rezhim-kak-aktivirovat-polnoekrannyi-rezhim-v-brauzere.html">Cum se activează modul Fullscreen în browser?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-"><a href="https://totrdlo.ru/ro/mirror-s-edge-chernyi-ekran-zvuk-est-mirrors-edge-ne-zapuskaetsya-ne.html">Oglinzile de margine nu pornește, nu funcționează, nu este instalat</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-6898"><a href="https://totrdlo.ru/ro/">Despre site</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">Despre site</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">Publicitate pe site-ul web</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">Contacte</a></li> </ul> </li> </ul></nav> <div class="footer-bottom"> <div class="footer-left"> <div class="foot__logo"> <div class="footer__logo-sitename">toddlo.ru. <span> RU.</span></div> </div> <style> .foot__logo { min-height: 35px; margin: 0 0 11px -79px; padding: 9px 0 0 79px; text-decoration: none; } </style> <p>© 2021 Toate drepturile rezervate</p> <p>Ghidul dvs. mobil. Operatori. Sfat util</p> <ul class="footer-bottom__nav"> <li><a href="" >Publicitate pe proiect</a></li> </ul> </div> <div class="footer-buttons"> </div> <ul class="footer__soc"> <li><a href="http://vk.com/" target="_blank" class="vk">În contact cu</a></li> <li>Odnoklassniki.</li> <li><a href="http://www.facebook.com/" target="_blank" class="fb">Facebook.</a></li> <li><a href="https://twitter.com/" target="_blank" class="twi">Stare de nervozitate.</a></li> </ul> <div class="footer-right"> <div class="footer__note"></div> <div class="footer__counters" id="text-2"> <div class="textwidget"></div> </div> </div> </div> </footer> </div> </div> <link rel='stylesheet' id='wp-lightbox-bank.css-css' href='/wp-content/plugins/wp-lightbox-bank/assets/css/wp-lightbox-bank.css?ver=4.8.3' type='text/css' media='all' /> <script type='text/javascript' src='https://totrdlo.ru/wp-content/themes/vannapedia_v.3/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.8.3'></script> <script type='text/javascript' src='/assets/scripts1.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://totrdlo.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar-fixed", "margin_top" : 10, "margin_bottom" : 0, "stop_id" : "respond", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-4'] } ; </script> <script type='text/javascript' src='https://totrdlo.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type='text/javascript' src='https://totrdlo.ru/wp-content/plugins/wp-lightbox-bank/assets/js/wp-lightbox-bank.js?ver=4.8.3'></script> <script type='text/javascript' src='https://totrdlo.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0'></script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>