Kako raditi sa XML dokumentima u Delphiju? Konkretno sa TXMLDocumentom? Korištenje modela XML dokumenta.

Za mnoge Delphi programere, spremanje postavki je povezano s korištenjem INI datoteke u svojim programima. Primenu ove metode, u manje ili više ozbiljnim projektima, treba izbegavati, jer ograničava fleksibilnost, što onemogućava dalje širenje programa. Treba reći da je ovaj pristup prilično popularan zbog svoje jednostavnosti korištenja i prisutnosti ugrađenih alata u razvojnom okruženju.

Međutim, strukturirano XML datoteke. Njihova prednost je što broj parametara možda nije fiksiran. Da biste ovo bolje razumjeli, razmotrite konkretan primjer.

U programu USSearch, kada kliknete na unos, pojavljuje se kontekstni meni u kojem se prikazuje lista stavki. Ove stavke su komande, koje se zauzvrat učitavaju iz datoteke postavki. U slučaju da su postavke pohranjene u INI fajl, onda bi program mogao da sačuva i učita određeni broj komandi, na primer 10 ili 50. Čim bude potrebna veća vrednost, moraćete ponovo da napišete kod i da ga ponovo kompajlirate u skladu sa tim.


Primjena pristupa koristeći XML datoteke, moći ćemo dinamički učitavati sve parametre odjeljka. Osim toga, konfiguracijski fajl će postati elegantniji, bez suvišnog numeriranja parametara. ali, standardnim sredstvima raditi sa XML Delphi ima mnogo nedostataka, pa preporučujem korištenje standardna biblioteka MSXML... Obično je uključen po defaultu u operativni sistemi Windows porodica.


Za povezivanje MSXML, moramo generirati datoteku interfejsa sa listom svih funkcija uvozom sa COM servera. Napisano je mnogo detaljnih članaka o tome kako uvesti interfejs, ali predlažem da preuzmete datoteku MSXML2_TLB.PAS spreman za upotrebu. Nakon što se datoteka preuzme, stavite je pored svog projekta ili je ispustite u fasciklu lib okruženja Delphi. Tako će svi kreirani programi moći koristiti modul MSXML, samo trebate dodati liniju MSXML2_TLB u upotrebu.

Radi jasnoće, razmotrite sljedeći primjer korištenja ove biblioteke:

Procedure LoadData; var XMLDoc: DOMDocument; Root: IXMLDOMElement; započeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Root: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("veličina / širina"). Tekst); Korijen: = nula; XMLDoc: = nil; kraj;

Prvo se kreira instanca klase DOMDocument, a zatim se sadržaj datoteke settings.xml učitava u memoriju. Pošto, prema standardu, bilo koji XML datoteka mora sadržavati root oznaku (in u ovom slučaju config), onda ga moramo dobiti pomoću funkcije DocumentElement... Zatim se sadržaj prikazuje između oznaka. , koji se zauzvrat nalaze između oznaka ... Dakle, iz datoteke settings.xml, naša metoda će prikazati tekst u MessageBoxu "100px".

500px 100px

Ovdje se primjenjuje metoda SelectSingleNode, koja uzima string kao parametar

Uprkos činjenici da se tema rada sa XML-om u Delphiju naširoko raspravlja na Internetu, pitanja o ovoj temi često se pojavljuju na svim vrstama foruma.

Napisao sam i ovo, ali bih se želio vratiti na stvarni slučaj brzog raščlanjivanja XML datoteke i izdvajanja podataka, što sam radio danas na poslu. Nije mi trebalo više od 5 minuta da dobijem potrebne podatke.

Pozadina. Danas sam trebao obraditi podatke o instalirane programe na kompjuterima korisnika (da, da, identifikujemo pirate :)). Tehničko odeljenje mi je dalo ove informacije izvučene od nesuđenih korisnika preko mreže koja koristi WMI. Program koji su koristili generiše izvještaje XML format... U skladu s tim, donijeli su mi brdo XML datoteka prilično složene strukture, iz kojih sam samo trebao izvući naziv instaliranih softverskih proizvoda.

Tretman . Nakon što sam ručno pogledao nekoliko fajlova, shvatio sam da neće trebati dugo da ostarim i odlučio sam da napišem mali konverter. Nakon što sam pokrenuo Delphi, odabrao sam XML DataBinding objekat iz spremišta i dodao mu jedan od fajlova. Ostavio sam sve postavke i parametre prema zadanim postavkama i kao rezultat toga, modul sa veliki iznos klase i sučelja za pristup elementima ove XML datoteke. Nisam se dugo bavio strukturom časova, odmah sam prešao na pisanje konvertera.

U novoj aplikaciji za konzolu, napisao sam prilično jednostavan kod:


program XML2TXT;

koristi
obrasci,
klase, SysUtils,
SoftwareXML u "SoftwareXML.pas";

procedura CovertXML2Text;
var
softbase: IXMLSTDSoftwareType;
i: cijeli broj;
sr: TSearchRec;
CurDir: string;
ExportFile: TStringList;
početi
CurDir: = IncludeTrailingPathDelimiter (ExtractFilePath (Application.ExeName));
ako je FindFirst (CurDir + "*. xml", faAnyFile, sr) = 0 onda
ponovi
ExportFile: = TStringList.Create;
softbase: = LoadSTDSoftware (Pchar (CurDir + sr.Name));
za i: = 0 do softbase.InstalledSoftware.source.software.Count - 1 do
ExportFile.Add (softbase.InstalledSoftware.source.software [i] .DisplayName);
ExportFile.Sort;
ExportFile.SaveToFile (CurDir + softbase.InstalledSoftware.Source.servername + ". Txt");
ExportFile.Free;
dok FindNext (sr) 0;
kraj;

početi
Application.Initialize;
CovertXML2Text;
kraj.

Kao rezultat, dobio sam po jedan uređivač teksta za svaki računar u mreži, koji sadrži listu instaliranog softvera.

Smatram da će ovaj kod zahtijevati neko objašnjenje. Na primjer, zašto sam koristio modul Forms u aplikaciji na konzoli i pozvao proceduru Application.Initialize;?

Zapravo je jednostavno - ovo je mali hak koji vam omogućava da koristite XML Data Binding u aplikaciji za konzolu. Zato što je tvrdoglavo odbijao da inicijalizira klasu za rad sa XML-om. Još nisam shvatio prave razloge - danas je vrijeme bilo važno, već sam proveo 4 od 5 minuta boreći se sa ovom greškom. :) Mislim da se kasnije pozabavim ovim problemom i napišem šta je pravi razlog.

Čudna softbase klasa je kreirana iz XML datoteke - to je ime osnovnog elementa, a softbase.InstalledSoftware.source.software [i] .DisplayName je samo navigacija kroz ugniježđene elemente do željenog i dobijanje njegove vrijednosti.

Ovako jedan od najvecih brze načine rad sa XML-om u Delphiju.

XML se sve više koristi za pohranjivanje informacija i njihovu razmjenu između aplikacija i web stranica. Mnoge aplikacije koriste ovaj jezik kao osnovni jezik za pohranjivanje podataka, dok ga druge koriste za izvoz i uvoz XML podataka. Dakle, vrijeme je da programeri počnu razmišljati o tome kako se XML podaci mogu koristiti u njihovim vlastitim aplikacijama.

U ovom članku ćemo pogledati XML Document Object Model (DOM) i Microsoftovu implementaciju XML DOM-a.

XML DOM je objektni model koji pruža programeru objekte za učitavanje i obradu XML datoteka. Objektni model se sastoji od sljedećih osnovnih objekata: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap i XMLDOMParseError. Svaki od ovih objekata (osim XMLDOMParseError) sadrži svojstva i metode koje vam omogućavaju da dobijete informacije o objektu, manipulirate vrijednostima i strukturom objekta i navigirate strukturom XML dokumenta.

Pogledajmo glavne XML DOM objekte i pokažimo neke primjere njihove upotrebe u Borland Delphi.

Korištenje XML DOM-a u Borland Delphiju

Da biste koristili Microsoft XML DOM u Delphi aplikacijama, potrebno je da povežete odgovarajuću biblioteku tipova na projekat. Da bismo to učinili, izvršavamo naredbu Project | Import Type Library i u dijalogu Import Type Library izaberite biblioteku Microsoft XML verzije 2.0 (verzija 2.0), koja se obično nalazi u datoteci Windows \ System \ MSXML.DLL

Nakon klika na dugme Create Unit kreiraće se modul interfejsa MSXML_TLB koji će nam omogućiti korišćenje XML DOM objekata: DOMDocument, XMLDocument, XMLHTTPRequest i niz drugih, implementiranih u biblioteci MSXML.DLL. Referenca na MSXML_TLB modul mora biti na listi Koristi.

XML DOM uređaj

Model objekta dokumenta predstavlja XML dokument u strukturi stabla grana. XML DOM API-ji omogućavaju aplikacijama da se kreću kroz stablo dokumenta i manipulišu njegovim granama. Svaka grana može imati određeni tip (DOMNodeType), prema kojem se određuju nadređena i podređena grana. Većina XML dokumenata sadrži grane elementa tipa, atributa i teksta. Atributi su posebna vrsta grane i nisu podređene grane. Za upravljanje atributima koristite posebne metode obezbjeđuju XML DOM objekti.

Pored implementacije interfejsa koji preporučuje World Wide Web Consortium (W3C), Microsoft XML DOM sadrži metode koje podržavaju XSL, XSL obrasce, prostore imena i tipove podataka. Na primjer, metoda SelectNodes vam omogućava da koristite sintaksu XSL uzorka za pronalaženje grana u određenom kontekstu, a metoda TransformNode podržava korištenje XSL-a za izvođenje transformacija.

Testirajte XML dokument

Kao primjer XML dokumenta, uzmimo muzički CD-ROM direktorij, koji ima sljedeću strukturu:

Empire burlesque Bob dylan SAD Columbia 10.90 1985 Sakrij svoje srce Bonnie Tylor UK CBS Records 9.90 1988 ... Skini mi srce Joe Cocker SAD EMI 8.20 1987

Sada smo spremni da počnemo gledati XML DOM objektni model, počevši od objekta XMLDOMDocument.

XML dokument - XMLDOMDocument objekat

Rad sa XML dokumentom počinje njegovim učitavanjem. Da bismo to učinili, koristimo metodu Load, koja ima samo jedan parametar koji specificira URL učitanog dokumenta. Prilikom učitavanja datoteka s lokalnog diska navodi se samo puno ime datoteke (protokol datoteke: /// u ovom slučaju može biti izostavljen). Ako je XML dokument pohranjen kao string, koristite metodu LoadXML za učitavanje dokumenta.

Svojstvo Async se koristi za kontrolu načina na koji se dokument učitava (sinhrono ili asinkrono). Po defaultu, ovo svojstvo je postavljeno na True, što ukazuje da se dokument učitava asinhrono i kontrola se vraća aplikaciji prije nego što se dokument u potpunosti učita. U suprotnom, dokument se učitava sinhrono, a zatim morate provjeriti vrijednost svojstva ReadyState da biste saznali da li se dokument učitao ili ne. Također možete kreirati rukovatelj za događaj OnReadyStateChange koji će preuzeti kontrolu kada se promijeni vrijednost svojstva ReadyState.

Sljedeće pokazuje kako učitati XML dokument pomoću metode Load:

Koristi ... MSXML_TLB ... proceduru TForm1.Button1Click (Pošiljalac: TObject); var XMLDoc: IXMLDOMDocument; započeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // // Ovdje je kod koji manipulira // XML dokumentom i njegovim granama // XMLDoc: = Nil; kraj;

Nakon što se dokument učita, možemo pristupiti njegovim svojstvima. Dakle, svojstvo NodeName će sadržavati vrijednost #document, svojstvo NodeTypeString će sadržavati vrijednost dokumenta, a svojstvo URL će sadržavati datoteku: /// C: /DATA/DATA.xml vrijednost.

Obrada grešaka

Od posebnog interesa su svojstva vezana za obradu dokumenata pri učitavanju. Na primjer, svojstvo ParseError vraća XMLDOMParseError objekt koji sadrži informacije o grešci koja se dogodila tijekom obrade dokumenta.

Da biste napisali rukovalac greškama, možete dodati sljedeći kod:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml’); XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Tada // // Ovdje obrađujemo grešku // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;

Da biste saznali koje informacije se vraćaju u slučaju greške, promijenite sljedeći unos direktorija:

Empire burlesque Bob dylan SAD Columbia 10.90 1985

uklanjanje elementa za zatvaranje u drugom redu:</p><p> <CD> <TITLE>Empire burlesque <ARTIST>Bob dylan</ARTIST> <COUNTRY>SAD</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Sada napišimo kod koji vraća vrijednosti svojstva objekta XMLDOMParseError:</p><p>XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Zatim sa XMLError-om, Memo1.Lines počinje Add ('File:' + URL); Dodaj ('Kôd:' + IntToStr (ErrorCode)); Dodaj ('Greška:' + Razlog); Dodaj ('Tekst:' + SrcText); Dodaj („Linija:“ + IntToStr (Linija)); Dodaj ('Pozicija:' + IntToStr (LinePos)); kraj Else Memo1.Lines.Add (XMLDoc.XML); End;</p><p>i izvršite našu aplikaciju. Kao rezultat, dobijamo sljedeće informacije o grešci.</p> <p>Kao što možete vidjeti iz gornjeg primjera, informacije koje vraća XMLDOMParseError objekat su sasvim dovoljne da lokaliziraju grešku i razumiju uzrok njenog nastanka.</p> <p>Sada ćemo vratiti element za zatvaranje <TITLE>u našem dokumentu i nastavite našu raspravu o XML DOM-u.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Pristup stablu dokumenta</h2> <p>Da biste pristupili stablu dokumenta, možete ili dobiti korijenski element, a zatim iterirati njegove podređene grane ili pronaći određenu granu. U prvom slučaju, osnovni element dobijamo kroz svojstvo DocumentElement, koje vraća objekat tipa XMLDOMNode. Evo kako koristiti svojstvo DocumentElement da dobijete sadržaj svakog podređenog elementa:</p><p>Var čvor: IXMLDOMNode; Root: IXMLDOMElement; I: Integer; ... Root: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Čvor.Tekst); End;</p><p>Za naš XML dokument dobijamo sledeći tekst.</p> <p>Ako nas zanima određena grana ili grana ispod prve podređene grane, možemo koristiti metodu NodeFromID ili metodu GetElementByTagName objekta XMLDOMDocument.</p> <p>Metoda NodeFromID zahtijeva jedinstveni identifikator kako je definirano u XML šemi ili definiciji tipa dokumenta (DTD) i vraća granu s tim identifikatorom.</p> <p>Metoda GetElementByTagName zahtijeva string sa određenim elementom (oznakom) i vraća sve grane sa ovim elementom. Evo kako koristiti ovu metodu da pronađete sve izvođače u našem CD-ROM imeniku:</p><p>Čvorovi: IXMLDOMNodeList; Čvor: IXMLDOMNode; ... Čvorovi: = XMLDoc.GetElementsByTagName (‘UMJETNIK’); Za I: = 0 do Nodes.Length-1 do Početni čvor: = Nodes.Item [I]; Memo1.Lines.Add (Čvor.Tekst); End;</p><p>Za naš XML dokument dobit ćemo sljedeći tekst</p> <p>Imajte na umu da SelectNodes metoda objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Ali više o tome u nastavku.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Grana dokumenta - XMLDOMNode objekat</h2> <p>Objekt XMLDOMNode predstavlja granu dokumenta. Već smo se susreli sa ovim objektom kada smo dobili osnovni element dokumenta:</p><p>Root: = XMLDoc.DocumentElement;</p><p>Da biste dobili informacije o grani XML dokumenta, možete koristiti svojstva objekta XMLDOMNode (Tablica 1).</p> <p>Za pristup podacima pohranjenim u grani, uobičajeno je koristiti ili svojstvo NodeValue (dostupno za atribute, tekstualne grane, komentare, upute za obradu i CDATA odjeljke) ili svojstvo Text, koje vraća tekstualni sadržaj grane, ili svojstvo NodeTypedValue. Potonje se, međutim, može koristiti samo za grane sa upisanim stavkama.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Kretanje po stablu dokumenta</h3> <p>XMLDOMNode objekat pruža mnogo načina za kretanje kroz stablo dokumenta. Na primjer, da biste pristupili roditeljskoj grani, koristite svojstvo ParentNode (tip XMLDOMNode), pristupite podređenim granama kroz svojstva ChildNodes (tip XMLDOMNodeList), FirstChild i LastChild (tip XMLDOMNode), itd. Svojstvo OwnerDocument vraća XMLDOMDocument objekt koji identificira sam XML dokument. Gore navedena svojstva olakšavaju navigaciju stablom dokumenta.</p> <p>Sada prođimo kroz sve grane XML dokumenta:</p><p>Root: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Ako Node.HasChildNodes onda GetChilds (Čvor, 0); End;</p><p>Kao što je gore navedeno, SelectNodes objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Osim toga, postoji metoda SelectSingleNode koja vraća samo prvu granu dokumenta. Obje ove metode vam omogućavaju da definirate XSL šablone za pretraživanje grana.</p> <p>Pogledajmo proces korištenja SelectNodes metode za dohvaćanje svih grana koje imaju CD granu i PRICE podgranu:</p><p>Root: = XMLDoc.DocumentElement; Čvorovi: = Root.SelectNodes (‘CD / PRICE’);</p><p>Sve PRICE podgrane grane CD-a će biti smještene u kolekciju Čvorova. Vratit ćemo se na raspravu o XSL predlošcima malo kasnije.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulisanje podređenim granama</h3> <p>Za manipulaciju podređenim granama možemo koristiti metode objekta XMLDOMNode (Tablica 2).</p> <p>Da biste potpuno izbrisali zapis o prvom disku, potrebno je pokrenuti sljedeći kod:</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivamo korijenski element Root: = XMLDoc.DocumentElement; Čvor: = Root; // Uklonimo prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>Imajte na umu da u ovom primjeru brišemo prvu podređenu granu. Kako ukloniti prvi element prve podređene grane je prikazano u nastavku:</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivamo korijenski element Root: = XMLDoc.DocumentElement; // i prva podređena grana Čvor: = Root.FirstChild; // Uklonimo prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>U gornjem primjeru, izbrisali smo ne prvu granu <CD>…</CD> a prvi element grane je <TITLE>….

Sada dodajmo novu granu. Ispod je kod koji pokazuje kako dodati novi muzički CD-ROM unos:

Var NewNode: IXMLDOMNode; Dijete: IXMLDOMNode; ... // Kreiraj novu granu - NewNode: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Dodaj element Dijete: = XMLDoc.CreateNode (1, ‘TITLE’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Pink Floyd'; // Dodaj element <ARTIST>Dijete: = XMLDoc.CreateNode (1, ‘UMJETNIK’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Division Bell'; // Dodaj element <COUNTRY>Dijete: = XMLDoc.CreateNode (1, ‘DRŽAVA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'UK'; // Dodaj element <COMPANY>Dijete: = XMLDoc.CreateNode (1, ‘COMPANY’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘EMI Records Ltd.’; // Dodaj element <PRICE>Dijete: = XMLDoc.CreateNode (1, ‘CIJENA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = '11 .99 "; // Dodajte element <YEAR>Dijete: = XMLDoc.CreateNode (1, ‘GODINA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘1994’; // I dodati granu Root.AppendChild (NewNode); ...</p><p>Gornji kod pokazuje sljedeći niz koraka za dodavanje nove grane:</p> <ul><li>Kreiranje nove grane pomoću metode CreateNode: <ul><li>kreiranje elementa pomoću metode CreateNode;</li> <li>dodavanje elementa u granu pomoću metode AppendChild;</li> <li>postavljanje vrijednosti elementa kroz svojstvo Text;</li> <li>… Ponovite za sve elemente.</li> </ul></li> <li>Dodavanje nove grane u dokument pomoću metode AppendChild.</li> </ul><p>Podsjetimo da metoda AppendChild dodaje granu na kraj stabla. Da biste dodali granu na određeno mjesto u stablu, morate koristiti metodu InsertBefore.</p> <h2>Skup grana - XMLDOMNodeList objekt</h2> <p>Objekt XMLNodeList sadrži listu grana, koja se može izgraditi pomoću metoda SelectNodes ili GetElementsByTagName, a također se može dobiti iz svojstva ChildNodes.</p> <p>Već smo raspravljali o upotrebi ovog objekta u primjeru koji je dat u odjeljku "Kretanje po stablu dokumenta". Ovdje ćemo dati neke teorijske komentare.</p> <p>Broj grana na listi može se dobiti kao vrijednost svojstva Length. Grane su indeksirane od 0 do Length-1, a svaka pojedinačna grana je dostupna preko odgovarajuće indeksirane stavke u polju Item.</p> <p>Kretanje kroz listu grana može se obaviti i korištenjem metode NextNode, koja vraća sljedeću granu na listi, ili Nil ako je trenutna grana posljednja. Da biste se vratili na vrh liste, pozovite metodu Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Kreirajte i sačuvajte dokumente</h2> <p>Dakle, pokrili smo kako možete dodati grane i elemente postojećim XML dokumentima. Sada kreirajmo XML dokument u hodu. Prije svega, zapamtite da se dokument može učitati ne samo iz URL-a, već i iz običnog niza. Evo kako kreirati korijenski element, koji se zatim može koristiti za dinamičku izgradnju ostalih elemenata (što smo već pokrili u odjeljku Manipuliranje podređenim granama):</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; S: WideString; ... S: = ‘ <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.LoadXML (S); Root: = XMLDoc.DocumentElement; Čvor: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (čvor); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;</p><p>Nakon što napravite XML dokument, sačuvajte ga u datoteku koristeći metodu Save. Na primjer:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>Osim spremanja u datoteku, metoda Save vam omogućava da spremite XML dokument u novi XMLDOMDocument objekt. U ovom slučaju, dokument je u potpunosti obrađen i, kao rezultat, provjerava se njegova struktura i sintaksa. Evo kako da sačuvate dokument na drugom objektu:</p><p>Procedura TForm1.Button2Click (Pošiljalac: TObject); var XMLDoc2: IXMLDOMDocument; započeti XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Ništa; kraj;</p><p>Zaključno, metoda Save vam također omogućava da spremite XML dokument u druge COM objekte koji podržavaju IStream, IPersistStream ili IPersistStreamInit sučelja.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Korištenje XSL predložaka</h2> <p>Kada smo raspravljali o metodi SelectNodes objekta XMLDOMNode, spomenuli smo da ona pruža fleksibilniji način pristupa granama dokumenta. Fleksibilnost je u tome što možete specificirati XSL predložak kao kriterij za odabir grana. Takvi predlošci pružaju moćan mehanizam za pronalaženje informacija u XML dokumentima. Na primjer, da biste dobili listu svih muzičkih CD-ROM naslova u našem direktoriju, možete pokrenuti sljedeći upit:</p><p>Da biste saznali koji diskovi izvođača izlaze u SAD-u, zahtjev se formira na sljedeći način:</p><p>Čvorovi: = Root.SelectNodes (‘CD / ARTIST’);</p><p>Evo kako pronaći prvi disk u direktoriju:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>i zadnje:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Da biste pronašli diskove Boba Dylana, možete pokrenuti sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD [$ bilo koji $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>i da bismo dobili listu diskova napravljenih nakon 1985. godine, pokrećemo sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Detaljnija rasprava o XSL sintaksi zahtijeva posebnu publikaciju. Kako bih zaintrigirao čitatelje i podstakao daljnja istraživanja, navest ću samo jedan mali primjer moguće upotrebe XSL-a. Recimo da treba da konvertujemo naš katalog u običnu HTML tabelu. Koristeći tradicionalne metode, moramo iterirati preko svih grana stabla i za svaki primljeni element formirati odgovarajuće oznake <TD>…</TD>.</p> <p>Koristeći XSL, jednostavno kreiramo predložak (ili stylesheet) koji određuje šta i kako transformirati. Zatim prekrivamo ovaj predložak na naš katalog - i gotovi ste: imamo tekst XSL šablona koji transformiše katalog u tabelu (listing 2).</p> <p>Kod za prekrivanje XSL predloška u našem direktoriju izgleda ovako:</p><p>Procedura TForm1.Button2Click (Pošiljalac: TObject); var XSLDoc: IXMLDOMDocument; započeti XSLDoc: = CoDOMDocument.Create; XSLDoc.Load (‘C: \ DATA \ DATA.xsl’); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = Ništa; kraj;</p><p>Zaključujući našu raspravu o XSL-u, treba reći da se ovaj jezik trenutno aktivno koristi za transformaciju između različitih XML dokumenata, kao i za formatiranje dokumenata.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Zaključak</h2> <p>Iz očiglednih razloga, nemoguće je pokriti sve Microsoft XML DOM objekte i dati primjere njihove upotrebe u jednom članku. Ovdje smo se upravo dotakli osnovnih pitanja korištenja XML DOM-a u aplikacijama. Table 3 prikazuje sve objekte implementirane u Microsoft XML DOM.</p> <p>ComputerPres 12 "2000</p> <p>XML se sve više koristi za pohranjivanje informacija i njihovu razmjenu između aplikacija i web stranica. Mnoge aplikacije koriste ovaj jezik kao osnovni jezik za pohranjivanje podataka, dok ga druge koriste za izvoz i uvoz XML podataka. Dakle, vrijeme je da programeri počnu razmišljati o tome kako se XML podaci mogu koristiti u njihovim vlastitim aplikacijama.</p> <p>U ovom članku ćemo pogledati XML Document Object Model (DOM) i Microsoftovu implementaciju XML DOM-a.</p> <p>XML DOM je objektni model koji pruža programeru objekte za učitavanje i obradu XML datoteka. Objektni model se sastoji od sljedećih osnovnih objekata: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap i XMLDOMParseError. Svaki od ovih objekata (osim XMLDOMParseError) sadrži svojstva i metode koje vam omogućavaju da dobijete informacije o objektu, manipulirate vrijednostima i strukturom objekta i navigirate strukturom XML dokumenta.</p> <p>Pogledajmo glavne XML DOM objekte i pokažimo neke primjere njihove upotrebe u Borland Delphi.</p> <h2>Korištenje XML DOM-a u Borland Delphiju</h2> <p>Da biste koristili Microsoft XML DOM u Delphi aplikacijama, potrebno je da povežete odgovarajuću biblioteku tipova na projekat. Da bismo to učinili, izvršavamo naredbu Project | Import Type Library i u dijalogu Import Type Library izaberite biblioteku Microsoft XML verzije 2.0 (verzija 2.0), koja se obično nalazi u datoteci Windows \ System \ MSXML.DLL</p> <p>Nakon klika na dugme Create Unit kreiraće se modul interfejsa MSXML_TLB koji će nam omogućiti korišćenje XML DOM objekata: DOMDocument, XMLDocument, XMLHTTPRequest i niz drugih, implementiranih u biblioteci MSXML.DLL. Referenca na MSXML_TLB modul mora biti na listi Koristi.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XML DOM uređaj</h2> <p>Model objekta dokumenta predstavlja XML dokument u strukturi stabla grana. XML DOM API-ji omogućavaju aplikacijama da se kreću kroz stablo dokumenta i manipulišu njegovim granama. Svaka grana može imati određeni tip (DOMNodeType), prema kojem se određuju nadređena i podređena grana. Većina XML dokumenata sadrži grane elementa tipa, atributa i teksta. Atributi su posebna vrsta grane i nisu podređene grane. Za manipulisanje atributima koriste se posebne metode koje pružaju XML DOM objekti.</p> <p>Pored implementacije interfejsa koji preporučuje World Wide Web Consortium (W3C), Microsoft XML DOM sadrži metode koje podržavaju XSL, XSL obrasce, prostore imena i tipove podataka. Na primjer, metoda SelectNodes vam omogućava da koristite sintaksu XSL uzorka za pronalaženje grana u određenom kontekstu, a metoda TransformNode podržava korištenje XSL-a za izvođenje transformacija.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Testirajte XML dokument</h2> <p>Kao primjer XML dokumenta, uzmimo muzički CD-ROM direktorij, koji ima sljedeću strukturu:</p><p> <?xml version=”1.0"?> <CATALOG> <CD> <TITLE>Empire burlesque Bob dylan SAD Columbia 10.90 1985 Sakrij svoje srce Bonnie Tylor UK CBS Records 9.90 1988 ... Skini mi srce Joe Cocker SAD EMI 8.20 1987

Sada smo spremni da počnemo gledati XML DOM objektni model, počevši od objekta XMLDOMDocument.

XML dokument - XMLDOMDocument objekat

Rad sa XML dokumentom počinje njegovim učitavanjem. Da bismo to učinili, koristimo metodu Load, koja ima samo jedan parametar koji specificira URL učitanog dokumenta. Prilikom učitavanja datoteka s lokalnog diska navodi se samo puno ime datoteke (protokol datoteke: /// u ovom slučaju može biti izostavljen). Ako je XML dokument pohranjen kao string, koristite metodu LoadXML za učitavanje dokumenta.

Svojstvo Async se koristi za kontrolu načina na koji se dokument učitava (sinhrono ili asinkrono). Po defaultu, ovo svojstvo je postavljeno na True, što ukazuje da se dokument učitava asinhrono i kontrola se vraća aplikaciji prije nego što se dokument u potpunosti učita. U suprotnom, dokument se učitava sinhrono, a zatim morate provjeriti vrijednost svojstva ReadyState da biste saznali da li se dokument učitao ili ne. Također možete kreirati rukovatelj za događaj OnReadyStateChange koji će preuzeti kontrolu kada se promijeni vrijednost svojstva ReadyState.

Sljedeće pokazuje kako učitati XML dokument pomoću metode Load:

Koristi ... MSXML_TLB ... proceduru TForm1.Button1Click (Pošiljalac: TObject); var XMLDoc: IXMLDOMDocument; započeti XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // // Ovdje je kod koji manipulira // XML dokumentom i njegovim granama // XMLDoc: = Nil; kraj;

Nakon što se dokument učita, možemo pristupiti njegovim svojstvima. Dakle, svojstvo NodeName će sadržavati vrijednost #document, svojstvo NodeTypeString će sadržavati vrijednost dokumenta, a svojstvo URL će sadržavati datoteku: /// C: /DATA/DATA.xml vrijednost.

Obrada grešaka

Od posebnog interesa su svojstva vezana za obradu dokumenata pri učitavanju. Na primjer, svojstvo ParseError vraća XMLDOMParseError objekt koji sadrži informacije o grešci koja se dogodila tijekom obrade dokumenta.

Da biste napisali rukovalac greškama, možete dodati sljedeći kod:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml’); XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Tada // // Ovdje obrađujemo grešku // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;

Da biste saznali koje informacije se vraćaju u slučaju greške, promijenite sljedeći unos direktorija:

Empire burlesque Bob dylan SAD Columbia 10.90 1985

uklanjanje elementa za zatvaranje u drugom redu:</p><p> <CD> <TITLE>Empire burlesque <ARTIST>Bob dylan</ARTIST> <COUNTRY>SAD</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Sada napišimo kod koji vraća vrijednosti svojstva objekta XMLDOMParseError:</p><p>XMLError: = XMLDoc.ParseError; Ako XMLError.ErrorCode<>0 Zatim sa XMLError-om, Memo1.Lines počinje Add ('File:' + URL); Dodaj ('Kôd:' + IntToStr (ErrorCode)); Dodaj ('Greška:' + Razlog); Dodaj ('Tekst:' + SrcText); Dodaj („Linija:“ + IntToStr (Linija)); Dodaj ('Pozicija:' + IntToStr (LinePos)); kraj Else Memo1.Lines.Add (XMLDoc.XML); End;</p><p>i izvršite našu aplikaciju. Kao rezultat, dobijamo sljedeće informacije o grešci.</p> <p>Kao što možete vidjeti iz gornjeg primjera, informacije koje vraća XMLDOMParseError objekat su sasvim dovoljne da lokaliziraju grešku i razumiju uzrok njenog nastanka.</p> <p>Sada ćemo vratiti element za zatvaranje <TITLE>u našem dokumentu i nastavite našu raspravu o XML DOM-u.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Pristup stablu dokumenta</h2> <p>Da biste pristupili stablu dokumenta, možete ili dobiti korijenski element, a zatim iterirati njegove podređene grane ili pronaći određenu granu. U prvom slučaju, osnovni element dobijamo kroz svojstvo DocumentElement, koje vraća objekat tipa XMLDOMNode. Evo kako koristiti svojstvo DocumentElement da dobijete sadržaj svakog podređenog elementa:</p><p>Var čvor: IXMLDOMNode; Root: IXMLDOMElement; I: Integer; ... Root: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Čvor.Tekst); End;</p><p>Za naš XML dokument dobijamo sledeći tekst.</p> <p>Ako nas zanima određena grana ili grana ispod prve podređene grane, možemo koristiti metodu NodeFromID ili metodu GetElementByTagName objekta XMLDOMDocument.</p> <p>Metoda NodeFromID zahtijeva jedinstveni identifikator kako je definirano u XML šemi ili definiciji tipa dokumenta (DTD) i vraća granu s tim identifikatorom.</p> <p>Metoda GetElementByTagName zahtijeva string sa određenim elementom (oznakom) i vraća sve grane sa ovim elementom. Evo kako koristiti ovu metodu da pronađete sve izvođače u našem CD-ROM imeniku:</p><p>Čvorovi: IXMLDOMNodeList; Čvor: IXMLDOMNode; ... Čvorovi: = XMLDoc.GetElementsByTagName (‘UMJETNIK’); Za I: = 0 do Nodes.Length-1 do Početni čvor: = Nodes.Item [I]; Memo1.Lines.Add (Čvor.Tekst); End;</p><p>Za naš XML dokument dobit ćemo sljedeći tekst</p> <p>Imajte na umu da SelectNodes metoda objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Ali više o tome u nastavku.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Grana dokumenta - XMLDOMNode objekat</h2> <p>Objekt XMLDOMNode predstavlja granu dokumenta. Već smo se susreli sa ovim objektom kada smo dobili osnovni element dokumenta:</p><p>Root: = XMLDoc.DocumentElement;</p><p>Da biste dobili informacije o grani XML dokumenta, možete koristiti svojstva objekta XMLDOMNode (Tablica 1).</p> <p>Za pristup podacima pohranjenim u grani, uobičajeno je koristiti ili svojstvo NodeValue (dostupno za atribute, tekstualne grane, komentare, upute za obradu i CDATA odjeljke) ili svojstvo Text, koje vraća tekstualni sadržaj grane, ili svojstvo NodeTypedValue. Potonje se, međutim, može koristiti samo za grane sa upisanim stavkama.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Kretanje po stablu dokumenta</h3> <p>XMLDOMNode objekat pruža mnogo načina za kretanje kroz stablo dokumenta. Na primjer, da biste pristupili roditeljskoj grani, koristite svojstvo ParentNode (tip XMLDOMNode), pristupite podređenim granama kroz svojstva ChildNodes (tip XMLDOMNodeList), FirstChild i LastChild (tip XMLDOMNode), itd. Svojstvo OwnerDocument vraća XMLDOMDocument objekt koji identificira sam XML dokument. Gore navedena svojstva olakšavaju navigaciju stablom dokumenta.</p> <p>Sada prođimo kroz sve grane XML dokumenta:</p><p>Root: = XMLDoc.DocumentElement; Za I: = 0 do Root.ChildNodes.Length-1 do Početni čvor: = Root.ChildNodes.Item [I]; Ako Node.HasChildNodes onda GetChilds (Čvor, 0); End;</p><p>Kao što je gore navedeno, SelectNodes objekta XMLDOMNode pruža fleksibilniji način pristupa granama dokumenta. Osim toga, postoji metoda SelectSingleNode koja vraća samo prvu granu dokumenta. Obje ove metode vam omogućavaju da definirate XSL šablone za pretraživanje grana.</p> <p>Pogledajmo proces korištenja SelectNodes metode za dohvaćanje svih grana koje imaju CD granu i PRICE podgranu:</p><p>Root: = XMLDoc.DocumentElement; Čvorovi: = Root.SelectNodes (‘CD / PRICE’);</p><p>Sve PRICE podgrane grane CD-a će biti smještene u kolekciju Čvorova. Vratit ćemo se na raspravu o XSL predlošcima malo kasnije.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulisanje podređenim granama</h3> <p>Za manipulaciju podređenim granama možemo koristiti metode objekta XMLDOMNode (Tablica 2).</p> <p>Da biste potpuno izbrisali zapis o prvom disku, potrebno je pokrenuti sljedeći kod:</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivamo korijenski element Root: = XMLDoc.DocumentElement; Čvor: = Root; // Uklonimo prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>Imajte na umu da u ovom primjeru brišemo prvu podređenu granu. Kako ukloniti prvi element prve podređene grane je prikazano u nastavku:</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml’); // Dobivamo korijenski element Root: = XMLDoc.DocumentElement; // i prva podređena grana Čvor: = Root.FirstChild; // Uklonimo prvu podređenu granu Node.RemoveChild (Node.FirstChild);</p><p>U gornjem primjeru, izbrisali smo ne prvu granu <CD>…</CD> a prvi element grane je <TITLE>….

Sada dodajmo novu granu. Ispod je kod koji pokazuje kako dodati novi muzički CD-ROM unos:

Var NewNode: IXMLDOMNode; Dijete: IXMLDOMNode; ... // Kreiraj novu granu - NewNode: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Dodaj element Dijete: = XMLDoc.CreateNode (1, ‘TITLE’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Pink Floyd'; // Dodaj element <ARTIST>Dijete: = XMLDoc.CreateNode (1, ‘UMJETNIK’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'Division Bell'; // Dodaj element <COUNTRY>Dijete: = XMLDoc.CreateNode (1, ‘DRŽAVA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = 'UK'; // Dodaj element <COMPANY>Dijete: = XMLDoc.CreateNode (1, ‘COMPANY’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘EMI Records Ltd.’; // Dodaj element <PRICE>Dijete: = XMLDoc.CreateNode (1, ‘CIJENA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = '11 .99 "; // Dodajte element <YEAR>Dijete: = XMLDoc.CreateNode (1, ‘GODINA’, ‘’); // Dodaj element NewNode.AppendChild (Child); // I postavite njegovu vrijednost Child.Text: = ‘1994’; // I dodati granu Root.AppendChild (NewNode); ...</p><p>Gornji kod pokazuje sljedeći niz koraka za dodavanje nove grane:</p> <ul><li>Kreiranje nove grane pomoću metode CreateNode: <ul><li>kreiranje elementa pomoću metode CreateNode;</li> <li>dodavanje elementa u granu pomoću metode AppendChild;</li> <li>postavljanje vrijednosti elementa kroz svojstvo Text;</li> <li>… Ponovite za sve elemente.</li> </ul></li> <li>Dodavanje nove grane u dokument pomoću metode AppendChild.</li> </ul><p>Podsjetimo da metoda AppendChild dodaje granu na kraj stabla. Da biste dodali granu na određeno mjesto u stablu, morate koristiti metodu InsertBefore.</p> <h2>Skup grana - XMLDOMNodeList objekt</h2> <p>Objekt XMLNodeList sadrži listu grana, koja se može izgraditi pomoću metoda SelectNodes ili GetElementsByTagName, a također se može dobiti iz svojstva ChildNodes.</p> <p>Već smo raspravljali o upotrebi ovog objekta u primjeru koji je dat u odjeljku "Kretanje po stablu dokumenta". Ovdje ćemo dati neke teorijske komentare.</p> <p>Broj grana na listi može se dobiti kao vrijednost svojstva Length. Grane su indeksirane od 0 do Length-1, a svaka pojedinačna grana je dostupna preko odgovarajuće indeksirane stavke u polju Item.</p> <p>Kretanje kroz listu grana može se obaviti i korištenjem metode NextNode, koja vraća sljedeću granu na listi, ili Nil ako je trenutna grana posljednja. Da biste se vratili na vrh liste, pozovite metodu Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Kreirajte i sačuvajte dokumente</h2> <p>Dakle, pokrili smo kako možete dodati grane i elemente postojećim XML dokumentima. Sada kreirajmo XML dokument u hodu. Prije svega, zapamtite da se dokument može učitati ne samo iz URL-a, već i iz običnog niza. Evo kako kreirati korijenski element, koji se zatim može koristiti za dinamičku izgradnju ostalih elemenata (što smo već pokrili u odjeljku Manipuliranje podređenim granama):</p><p>Var XMLDoc: IXMLDOMDocument; Root: IXMLDOMNode; Čvor: IXMLDOMNode; S: WideString; ... S: = ‘ <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.LoadXML (S); Root: = XMLDoc.DocumentElement; Čvor: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (čvor); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Ništa;</p><p>Nakon što napravite XML dokument, sačuvajte ga u datoteku koristeći metodu Save. Na primjer:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>Osim spremanja u datoteku, metoda Save vam omogućava da spremite XML dokument u novi XMLDOMDocument objekt. U ovom slučaju, dokument je u potpunosti obrađen i, kao rezultat, provjerava se njegova struktura i sintaksa. Evo kako da sačuvate dokument na drugom objektu:</p><p>Procedura TForm1.Button2Click (Pošiljalac: TObject); var XMLDoc2: IXMLDOMDocument; započeti XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Ništa; kraj;</p><p>Zaključno, metoda Save vam također omogućava da spremite XML dokument u druge COM objekte koji podržavaju IStream, IPersistStream ili IPersistStreamInit sučelja.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Korištenje XSL predložaka</h2> <p>Kada smo raspravljali o metodi SelectNodes objekta XMLDOMNode, spomenuli smo da ona pruža fleksibilniji način pristupa granama dokumenta. Fleksibilnost je u tome što možete specificirati XSL predložak kao kriterij za odabir grana. Takvi predlošci pružaju moćan mehanizam za pronalaženje informacija u XML dokumentima. Na primjer, da biste dobili listu svih muzičkih CD-ROM naslova u našem direktoriju, možete pokrenuti sljedeći upit:</p><p>Da biste saznali koji diskovi izvođača izlaze u SAD-u, zahtjev se formira na sljedeći način:</p><p>Čvorovi: = Root.SelectNodes (‘CD / ARTIST’);</p><p>Evo kako pronaći prvi disk u direktoriju:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>i zadnje:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Da biste pronašli diskove Boba Dylana, možete pokrenuti sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD [$ bilo koji $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>i da bismo dobili listu diskova napravljenih nakon 1985. godine, pokrećemo sljedeći upit:</p><p>Čvorovi: = Root.SelectNodes (‘CD / TITLE’);</p><p>Detaljnija rasprava o XSL sintaksi zahtijeva posebnu publikaciju. Kako bih zaintrigirao čitatelje i podstakao daljnja istraživanja, navest ću samo jedan mali primjer moguće upotrebe XSL-a. Recimo da treba da konvertujemo naš katalog u običnu HTML tabelu. Koristeći tradicionalne metode, moramo iterirati preko svih grana stabla i za svaki primljeni element formirati odgovarajuće oznake <TD>…</TD>.</p> <p>Koristeći XSL, jednostavno kreiramo predložak (ili stylesheet) koji određuje šta i kako transformirati. Zatim prekrivamo ovaj predložak na naš katalog - i gotovi ste: imamo tekst XSL šablona koji transformiše katalog u tabelu (listing 2).</p> <p>Kod za prekrivanje XSL predloška u našem direktoriju izgleda ovako:</p><p>Procedura TForm1.Button2Click (Pošiljalac: TObject); var XSLDoc: IXMLDOMDocument; započeti XSLDoc: = CoDOMDocument.Create; XSLDoc.Load (‘C: \ DATA \ DATA.xsl’); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = Ništa; kraj;</p><p>Zaključujući našu raspravu o XSL-u, treba reći da se ovaj jezik trenutno aktivno koristi za transformaciju između različitih XML dokumenata, kao i za formatiranje dokumenata.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Zaključak</h2> <p>Iz očiglednih razloga, nemoguće je pokriti sve Microsoft XML DOM objekte i dati primjere njihove upotrebe u jednom članku. Ovdje smo se upravo dotakli osnovnih pitanja korištenja XML DOM-a u aplikacijama. Table 3 prikazuje sve objekte implementirane u Microsoft XML DOM.</p> <p>ComputerPres 12 "2000</p> <p>Pozdravljam sve! Nekoliko godina sam pisao na Matlabu, a onda sam bio nestrpljiv da napišem program na Delphiju.</p><p>Moram da naučim kako da radim sa xml dokumentima. Radim u RAD Stiduo XE3. Postoji komponenta TXMLDocument, vjerovatno poznata mnogim Delphi programerima. Čini se da može mnogo. Ali problem je što ne postoji jasna dokumentacija i opis za to. Pomoć u RAD Studiju je sranje, jer tamo nema normalnih informacija; samo raštrkana po stranicama oskudna pomoć o nekim metodama i procedurama (bez primjera i normalnog opisa). Preturao po cijelom internetu. Pronađene su samo teme na forumima sa rešenjima određenih problema, gde morate još sat vremena da pogađate šta radi ova ili ona linija povezana sa pristupom xml datoteci. <br>Također mi je potreban priručnik o glavnim funkcijama, procedurama i metodama koje se koriste pri radu sa xml-om. Udžbenik, priručnik, opis. Ili barem "xml u Delphiju za lutke". Na primjer:</p><p><i>Da biste otvorili xml datoteku, koristite metodu XMLDocument1.LoadFromFile ("filemane.xml"), gdje je ime datoteke ime datoteke. <br>Varijabla lista čvorova tipa IXMLNode se koristi za pohranjivanje liste djece. Metoda Xmldocument1.DocumentElement (gdje je XMLDocument1 xml datoteka koju treba ispitati) koristi se za definiranje ove liste. <br>Za upit o sadržaju podređenog elementa "element1", koristite metodu XMLDocument1.DocumentElement.ChildNodes ["element1"]. Text .... <br></i><br>iu tom duhu dalje na sve primijenjene metode, procedure, tipove podataka. <br>Gdje mogu pronaći slične priručnike/opise? Ko može pomoći?</p><p>Ako vam treba konkretan zadatak, opisat ću ga. <br>Postoji xml dokument u obliku:</p><p> <br><ltm version="1.0" type="settings" ><br><progname>LTM</progname></p><p><templateFiles><br> <assets>fon.png</assets><br> <assets>up.jpg</assets><br> <images><br> <pano> <tiles>pano_u.jpg</tiles><br> <tiles>pano_f.jpg</tiles><br> </pano><br> <tour><br> <tourimages>start.jpg</tourimages><br> <tourimages>tmb.jpg</tourimages><br> </tour><br> </images><br></templateFiles><br><dimensions><br> <tiles type="pc">1910</tiles><br> <tiles type="ipad">768</tiles><br> <tiles side="iphone">512</tiles><br> <tourimages name="start.jpg" edge="long">1024</tourimages><br> <tourimages name="start.jpg" edge="short">768</tourimages><br></dimensions></p><p><hotspot name="hs015_2" style="mappoint" scena="scene017" ath="68.17644363437007" /><br><hotspot name="hs015_1" style="mappoint" scena="scene014" rz="4436007" /> <br><data name="onstart" mode="noVoice">Neki tekst</data><br><data name="onerror" mode="noVoice">Neki tekst greške</data><br><data name="onerror" mode="alarm">Drugi tekst greške</data></p><p>U programskom kodu imamo:</p><p>var <br>...<br>roditelj, dijete1: IXMLNode;</p><p>početi <br>XMLDocument1.LoadFromFile ("f: \ filename.x ml"); <br>XMLDocument1.Active: = istina; <br>.<br>.<br>kraj</p><p>Šta treba da naučite da radite: <br>(Unaprijed se izvinjavam ako sam pogrešno imenovao komponente xml dokumenta) <br>1. Dobijte ime osnovnog elementa (u našem slučaju ltm), kao i listu njegovih atributa (verzija, tip) i njihove vrijednosti ("1.0", "postavke"). <br>2. Dobijte broj elemenata koji su potomci korijena. U ovom slučaju ima ih 7: templateFiles, dimenzije, hotspot, hotspot, data, data, data. Dobiti nazive elemenata (tagova) (templateFiles, dimenzije, itd.). Nakon što dobijem broj elemenata i naučim kako da izdvojim njihova imena, napravit ću petlju od 0 do count-1 i učiniti ono što mi treba. <br>3. Dobijte broj i listu atributa potrebnog elementa. Na primjer, za element vruće tačke. Tačan odgovor bi bila 4 atributa. Za prvi hotspot element, to će biti ime, stil, scena, ath. Za drugi - isto, samo umjesto atributa ath - atribut rz. <br>Obratite pažnju da se u datoteci nalaze 2 hotspot elementa, sa različitim atributima. Evo kako raditi s njima (ako postoji više od 1 elementa istog imena)? <br>Želim ovako: Dobijem listu djece po rel. do osnovnog (vidi str. 2), pokrenite for petlju kroz njih i pronađite elemente hotspota u kojima je parametar name jednak traženom (recimo "hs015_2" - sigurno će biti jedan takav element). Da li je moguće nekako riješiti ovaj problem bez petlje? To jest, dobiti vrijednost atributa scene za element hotspota s imenom = "hs015_2"? <br>4. Uradite gore navedeno za čvorove i elemente koji su djeca u odnosu na djecu. U mom primjeru, čvor (dijete i roditelj i. <br>Ako sam dobro razumio, morate nekako prenijeti sadržaj čvora na <a href="https://obanracer.ru/bs/tipy-peremennyh-visual-basic-yazyk-programmirovaniya-visual-basic-tipy-dannyh.html">varijabilna like</a> IXMLNode i uradite isto kao u stavkama 1-3. pa?</p><p>5. Morate naučiti kako promijeniti gornje parametre (podesite svoje).</p><p>Čini se tako daleko. U ovoj fazi su mi najvažnije sintaktičke konstrukcije. <br>Tko je vlasnik ove teme, neka napiše druge sintaktičke konstrukcije za rješavanje gornjih problema (kako dobiti atribute, njihov broj, broj elemenata, njihova imena, itd.). Sada je glavna stvar savladati sintaksu, a svoj algoritam ću implementirati kasnije. Hvala puno unapred!</p><p>P.S. Zaista ne bih želio da pišem svoj XML parser od nule samo zato što ne postoji normalan opis za postojeće.</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 style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div> </div> <footer> <div class="td-block-row td-post-next-prev"> <div class="td-block-span6 td-post-prev-post"> <div class="td-post-next-prev-content"><span>Prethodni članak</span><a href="https://obanracer.ru/bs/algoritmy-cifrovoi-filtracii-signalov-postroennye-na-baze.html">Algoritmi za digitalno filtriranje signala metodom usrednjavanja i istraživanje efikasnosti njihovog rada Snimanje digitalnih signala i algoritmi filtriranja</a></div> </div> <!-- /next_post --> <div class="td-next-prev-separator"></div> <div class="td-block-span6 td-post-next-post"> <div class="td-post-next-prev-content"><span>Sljedeći članak</span><a href="https://obanracer.ru/bs/beta-raspredelenie-sluchainoi-velichiny-beta-raspredelenie.html">Beta distribucija slučajne varijable</a></div> <!-- /next_post --> </div> </div> <div class="td-author-name vcard author" style="display: none"><span class="fn"><a href="https://obanracer.ru/bs/author/iulia">Julija</a></span></div> <span style="display: none;" itemprop="author" itemscope itemtype="https://schema.org/Person"><meta itemprop="name" content="Юлия"></span> <meta itemprop="datePublished" content="2016-05-16T15:47:37+00:00"> <meta itemprop="dateModified" content="2016-10-25T16:54:41+00:00"> <meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="/other/kak-zavyazat-galstuk-foto-poshagovo.html" /><span style="display: none;" itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><span style="display: none;" itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="//obanracer.ru/wp-content/uploads/2017/01/logo-300x100.png"></span> <meta itemprop="name" content="Мой секрет"> </span> <meta itemprop="headline " content="Как завязать галстук пошагово фото"><span style="display: none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="/wp-content/uploads/2016/05/1-19.jpg"><meta itemprop="width" content="640"><meta itemprop="height" content="450"></span> </footer> </article> <div class="td_block_wrap td_block_related_posts td_uid_3_5a236fb03c961_rand td_with_ajax_pagination td-pb-border-top td_block_template_1" data-td-block-uid="td_uid_3_5a236fb03c961" ><script>var block_td_uid_3_5a236fb03c961 = new tdBlock(); block_td_uid_3_5a236fb03c961.id = "td_uid_3_5a236fb03c961"; block_td_uid_3_5a236fb03c961.atts = '{ "limit":9,"sort":"","post_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","category_id":"","category_ids":"","custom_title":"","custom_url":"","show_child_cat":"","sub_cat_ajax":"","ajax_pagination":"next_prev","header_color":"","header_text_color":"","ajax_pagination_infinite_stop":"","td_column_number":3,"td_ajax_preloading":"","td_ajax_filter_type":"td_custom_related","td_ajax_filter_ids":"","td_filter_default_txt":"\u0412\u0441\u0435","color_preset":"","border_top":"","class":"td_uid_3_5a236fb03c961_rand","el_class":"","offset":"","css":"","tdc_css":"","tdc_css_class":"td_uid_3_5a236fb03c961_rand","live_filter":"cur_post_same_categories","live_filter_cur_post_id":10046,"live_filter_cur_post_author":"694350","block_template_id":""} '; block_td_uid_3_5a236fb03c961.td_column_number = "3"; block_td_uid_3_5a236fb03c961.block_type = "td_block_related_posts"; block_td_uid_3_5a236fb03c961.post_count = "9"; block_td_uid_3_5a236fb03c961.found_posts = "26"; block_td_uid_3_5a236fb03c961.header_color = ""; block_td_uid_3_5a236fb03c961.ajax_pagination_infinite_stop = ""; block_td_uid_3_5a236fb03c961.max_num_pages = "3"; tdBlocksArray.push(block_td_uid_3_5a236fb03c961); </script><h4 class="td-related-title td-block-title"><a id="td_uid_4_5a236fb03e35d" class="td-related-left td-cur-simple-item" data-td_filter_value="" data-td_block_id="td_uid_3_5a236fb03c961" href="#">SLIČNI ČLANCI</a></h4><div id=td_uid_3_5a236fb03c961 class="td_block_inner"> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/preobrazovanie-laplasa-osnovnye-opredeleniya-svoistva-formula.html" rel="bookmark" title="Napomene sa predavanja: Suština Laplaceove transformacije Istorija kompleksne varijable Laplace"><img width="218" height="150" class="entry-thumb" src="/uploads/eefaa524903a720136b3646d3b1410c0.jpg" alt="Napomene sa predavanja: Suština Laplaceove transformacije Istorija kompleksne varijable Laplace" title="Napomene sa predavanja: Suština Laplaceove transformacije Istorija kompleksne varijable Laplace"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/security/" class="td-post-category">Sigurnost</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/preobrazovanie-laplasa-osnovnye-opredeleniya-svoistva-formula.html" rel="bookmark" title="Napomene sa predavanja: Suština Laplaceove transformacije Istorija kompleksne varijable Laplace">Napomene sa predavanja: Suština Laplaceove transformacije Istorija kompleksne varijable Laplace</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/perehodnye-i-impulsnye-harakteristiki-rl-cepi-perehodnaya-i.html" rel="bookmark" title="Prolazni i impulsni odziv"><img width="218" height="150" class="entry-thumb" src="/uploads/12ee1f7ed39a26a762c9095d09eaf90d.jpg" alt="Prolazni i impulsni odziv" title="Prolazni i impulsni odziv"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/monitors/" class="td-post-category">Monitori</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/perehodnye-i-impulsnye-harakteristiki-rl-cepi-perehodnaya-i.html" rel="bookmark" title="Prolazni i impulsni odziv">Prolazni i impulsni odziv</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/elementy-teorii-sinteza-lineinyh-chastotnyh-filtrov-nikonov-i.html" rel="bookmark" title="Elementi teorije sinteze linearnih frekvencijskih filtara"><img width="218" height="150" class="entry-thumb" src="/uploads/3bd9713d43002d2cd36d5c181eb4545f.jpg" alt="Elementi teorije sinteze linearnih frekvencijskih filtara" title="Elementi teorije sinteze linearnih frekvencijskih filtara"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/processors/" class="td-post-category">Procesori</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/elementy-teorii-sinteza-lineinyh-chastotnyh-filtrov-nikonov-i.html" rel="bookmark" title="Elementi teorije sinteze linearnih frekvencijskih filtara">Elementi teorije sinteze linearnih frekvencijskih filtara</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/rangovaya-korrelyaciya-i-koefficient-rangovoi-korrelyacii-kendalla-koefficienty.html" rel="bookmark" title="Kendallov i Spearmanov koeficijenti korelacije ranga Kendallova formula koeficijenta korelacije"><img width="218" height="150" class="entry-thumb" src="/uploads/44c1f54edff8260861d28a025281d468.jpg" alt="Kendallov i Spearmanov koeficijenti korelacije ranga Kendallova formula koeficijenta korelacije" title="Kendallov i Spearmanov koeficijenti korelacije ranga Kendallova formula koeficijenta korelacije"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/monitors/" class="td-post-category">Monitori</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/rangovaya-korrelyaciya-i-koefficient-rangovoi-korrelyacii-kendalla-koefficienty.html" rel="bookmark" title="Kendallov i Spearmanov koeficijenti korelacije ranga Kendallova formula koeficijenta korelacije">Kendallov i Spearmanov koeficijenti korelacije ranga Kendallova formula koeficijenta korelacije</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/koefficienty-korrelyacii-rangov-spirmena-kendalla-koefficient-fehnera.html" rel="bookmark" title="Koeficijenti korelacije ranga Kendall i Spearman Koeficijenti korelacije ranga Spearman i Spearman"><img width="218" height="150" class="entry-thumb" src="/uploads/3c2f2cbff42c26e2381c1e98791b31ab.jpg" alt="Koeficijenti korelacije ranga Kendall i Spearman Koeficijenti korelacije ranga Spearman i Spearman" title="Koeficijenti korelacije ranga Kendall i Spearman Koeficijenti korelacije ranga Spearman i Spearman"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/windows-8/" class="td-post-category">Windows 8</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/koefficienty-korrelyacii-rangov-spirmena-kendalla-koefficient-fehnera.html" rel="bookmark" title="Koeficijenti korelacije ranga Kendall i Spearman Koeficijenti korelacije ranga Spearman i Spearman">Koeficijenti korelacije ranga Kendall i Spearman Koeficijenti korelacije ranga Spearman i Spearman</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/kendalla-koefficient-rangovoi-korrelyacii-rangovaya-korrelyaciya-i.html" rel="bookmark" title="Korelacija ranga i Kendallov koeficijent korelacije ranga Kendallov koeficijent korelacije ranga u excelu"><img width="218" height="150" class="entry-thumb" src="/uploads/f95f3e1a71c1314ca460e119aaeee099.jpg" alt="Korelacija ranga i Kendallov koeficijent korelacije ranga Kendallov koeficijent korelacije ranga u excelu" title="Korelacija ranga i Kendallov koeficijent korelacije ranga Kendallov koeficijent korelacije ranga u excelu"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/processors/" class="td-post-category">Procesori</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/kendalla-koefficient-rangovoi-korrelyacii-rangovaya-korrelyaciya-i.html" rel="bookmark" title="Korelacija ranga i Kendallov koeficijent korelacije ranga Kendallov koeficijent korelacije ranga u excelu">Korelacija ranga i Kendallov koeficijent korelacije ranga Kendallov koeficijent korelacije ranga u excelu</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/ot-chego-zavisit-uroven-bokovyh-lepestkov-sposoby-umensheniya.html" rel="bookmark" title="Načini za smanjenje nivoa bočnog režnja u sistemima emitera"><img width="218" height="150" class="entry-thumb" src="/uploads/55ee595bcd496b267e0acbf3f244f3d8.jpg" alt="Načini za smanjenje nivoa bočnog režnja u sistemima emitera" title="Načini za smanjenje nivoa bočnog režnja u sistemima emitera"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/windows-8/" class="td-post-category">Windows 8</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/ot-chego-zavisit-uroven-bokovyh-lepestkov-sposoby-umensheniya.html" rel="bookmark" title="Načini za smanjenje nivoa bočnog režnja u sistemima emitera">Načini za smanjenje nivoa bočnog režnja u sistemima emitera</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/pribor-kontrolya-telegrafnyh-iskazhenii-pribory-dlya-izmereniya-iskazhenii.html" rel="bookmark" title="Instrumenti za mjerenje izobličenja"><img width="218" height="150" class="entry-thumb" src="/uploads/7656386faba13f6b54586295ac593876.jpg" alt="Instrumenti za mjerenje izobličenja" title="Instrumenti za mjerenje izobličenja"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/case/" class="td-post-category">Kućišta</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/pribor-kontrolya-telegrafnyh-iskazhenii-pribory-dlya-izmereniya-iskazhenii.html" rel="bookmark" title="Instrumenti za mjerenje izobličenja">Instrumenti za mjerenje izobličenja</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/kak-eksperimentalno-snyat-vremennye-harakteristiki-lineinyh-cepei.html" rel="bookmark" title="Vremenske i frekvencijske karakteristike linearnih električnih kola"><img width="218" height="150" class="entry-thumb" src="/uploads/59a7163890be382444b0490cd41b9460.jpg" alt="Vremenske i frekvencijske karakteristike linearnih električnih kola" title="Vremenske i frekvencijske karakteristike linearnih električnih kola"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/ram/" class="td-post-category">RAM</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/kak-eksperimentalno-snyat-vremennye-harakteristiki-lineinyh-cepei.html" rel="bookmark" title="Vremenske i frekvencijske karakteristike linearnih električnih kola">Vremenske i frekvencijske karakteristike linearnih električnih kola</a></h3> </div> </div> </div> </div></div></div> </div> </div> <div class="td-pb-span4 td-main-sidebar"> <div class="td-ss-main-sidebar"> <aside class="widget �lambda_169101"> <div style="margin:10px 0"> </div> </aside> <div class="td_block_wrap td_block_1 td_block_widget td_uid_2_5a23c04f0cdc0_rand td-pb-border-top td_block_template_1 td-column-1" data-td-block-uid="td_uid_2_5a23c04f0cdc0"> <div class="td-block-title-wrap"> <h4 class="block-title"><span class="td-pulldown-size">Preporučeno</span></h4> </div> <div id=td_uid_2_5a23c04f0cdc0 class="td_block_inner"> <div class="td-block-span12"> <div class="td_module_4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/preobrazovanie-signalov-v-lineinyh-parametricheskih-cepyah-preobrazovanie.html" rel="bookmark" title="Konverzija signala linearnim parametarskim sklopovima"><img width="324" height="235" class="entry-thumb" src="/uploads/369b9cb80c8f71b3a3f6043d9db7d0e4.jpg" alt="Konverzija signala linearnim parametarskim sklopovima" title="Konverzija signala linearnim parametarskim sklopovima"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/bs/category/windows-7/" class="td-post-category">Windows 7</a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/preobrazovanie-signalov-v-lineinyh-parametricheskih-cepyah-preobrazovanie.html" rel="bookmark" title="Konverzija signala linearnim parametarskim sklopovima">Konverzija signala linearnim parametarskim sklopovima</a></h3> <div class="td-module-meta-info"> </div> <div class="td-excerpt">Pokazalo se da je klasična metoda analize procesa u linearnim kolima često povezana s potrebom za glomaznim transformacijama. Alternativa ...</div> </div> <!-- /next_post --> </div> <div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/sposoby-umensheniya-urovnya-bokovyh-lepestkov-v-sistemah-izluchatelei.html" rel="bookmark" title="Fazni obrazac"><img width="100" height="70" class="entry-thumb" src="/uploads/33460308bbec68357c5eac110ac6e75d.jpg" alt="Fazni obrazac" title="Fazni obrazac"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/sposoby-umensheniya-urovnya-bokovyh-lepestkov-v-sistemah-izluchatelei.html" rel="bookmark" title="Fazni obrazac">Fazni obrazac</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/monitors/" class="td-post-category">Monitori</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/podavlenie-bokovyh-lepestkov-diagramm-drl-i-prl-sposoby-umensheniya.html" rel="bookmark" title="Načini smanjenja nivoa bočnih režnjeva u sistemima emitera Ciljevi smanjenja SLL"><img width="100" height="70" class="entry-thumb" src="/uploads/f013c0bcd3d51e498c19efc985f94082.jpg" alt="Načini smanjenja nivoa bočnih režnjeva u sistemima emitera Ciljevi smanjenja SLL" title="Načini smanjenja nivoa bočnih režnjeva u sistemima emitera Ciljevi smanjenja SLL"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/podavlenie-bokovyh-lepestkov-diagramm-drl-i-prl-sposoby-umensheniya.html" rel="bookmark" title="Načini smanjenja nivoa bočnih režnjeva u sistemima emitera Ciljevi smanjenja SLL">Načini smanjenja nivoa bočnih režnjeva u sistemima emitera Ciljevi smanjenja SLL</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/processors/" class="td-post-category">Procesori</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/formula-radioimpulsov-pryamougolnoi-formy-matematicheskii-spektr.html" rel="bookmark" title="Matematički spektar periodičnog niza pravokutnih radio impulsa"><img width="100" height="70" class="entry-thumb" src="/uploads/1ecaf391bb56eb870a282d52d3fc2dd7.jpg" alt="Matematički spektar periodičnog niza pravokutnih radio impulsa" title="Matematički spektar periodičnog niza pravokutnih radio impulsa"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/formula-radioimpulsov-pryamougolnoi-formy-matematicheskii-spektr.html" rel="bookmark" title="Matematički spektar periodičnog niza pravokutnih radio impulsa">Matematički spektar periodičnog niza pravokutnih radio impulsa</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/processors/" class="td-post-category">Procesori</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/modelirovanie-matematicheskie-shemy-modelirovaniya-osnovnye-podhody-k.html" rel="bookmark" title="Šeme matematičkog modeliranja"><img width="100" height="70" class="entry-thumb" src="/uploads/fbff459336f81491aa2f54fb557a5021.jpg" alt="Šeme matematičkog modeliranja" title="Šeme matematičkog modeliranja"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/modelirovanie-matematicheskie-shemy-modelirovaniya-osnovnye-podhody-k.html" rel="bookmark" title="Šeme matematičkog modeliranja">Šeme matematičkog modeliranja</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/windows-8/" class="td-post-category">Windows 8</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/kakoe-reshenie-nazyvaetsya-optimalnym-graficheskii-metod-optimizacii.html" rel="bookmark" title="Metoda grafičke optimizacije za linearne modele"><img width="100" height="70" class="entry-thumb" src="/uploads/d55e1a37431616dfb49699306aa50486.jpg" alt="Metoda grafičke optimizacije za linearne modele" title="Metoda grafičke optimizacije za linearne modele"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/kakoe-reshenie-nazyvaetsya-optimalnym-graficheskii-metod-optimizacii.html" rel="bookmark" title="Metoda grafičke optimizacije za linearne modele">Metoda grafičke optimizacije za linearne modele</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/the-winchesters/" class="td-post-category">Winchesters</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/opredelenie-multikollinearnosti-prichiny-i-posledstviya.html" rel="bookmark" title="Uzroci i posljedice multikolinearnosti"><img width="100" height="70" class="entry-thumb" src="/uploads/b4022cdadc5df1be9925fa3b549437b6.jpg" alt="Uzroci i posljedice multikolinearnosti" title="Uzroci i posljedice multikolinearnosti"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/opredelenie-multikollinearnosti-prichiny-i-posledstviya.html" rel="bookmark" title="Uzroci i posljedice multikolinearnosti">Uzroci i posljedice multikolinearnosti</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/bs/category/processors/" class="td-post-category">Procesori</a> </div> </div> </div> </div> </div> </div> </div> <aside class="widget_text td_block_template_1 widget widget_custom_html"> <div class="textwidget custom-html-widget"> </div> </aside> </div> </div> </div> </div> </div> <div class="td-footer-wrapper td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span12"> </div> </div> <div class="td-pb-row"> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_11_5a23980e76adb_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_11_5a23980e76adb" > <div class="td-block-title-wrap"></div><div id=td_uid_11_5a23980e76adb class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/harakteristika-kompyuternyh-setei-naznachenie-komponenty-i-obshchaya-struktura.html" rel="bookmark" title="Namjena, komponente i opšta struktura računarskih mreža, osnovne topologije"><img width="218" height="150" class="entry-thumb" src="/uploads/80fdc571b33e69043b957b25efa48c58.jpg" alt="Namjena, komponente i opšta struktura računarskih mreža, osnovne topologije" title="Namjena, komponente i opšta struktura računarskih mreža, osnovne topologije"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/harakteristika-kompyuternyh-setei-naznachenie-komponenty-i-obshchaya-struktura.html" rel="bookmark" title="Namjena, komponente i opšta struktura računarskih mreža, osnovne topologije">Namjena, komponente i opšta struktura računarskih mreža, osnovne topologije</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/obobshchennaya-harakteristika-signala-vidy-signalov-analogovyi-cifrovoi.html" rel="bookmark" title="Tipovi signala: analogni, digitalni, diskretni"><img width="218" height="150" class="entry-thumb" src="/uploads/27daa6104026c0549ac1cf219846cc46.jpg" alt="Tipovi signala: analogni, digitalni, diskretni" title="Tipovi signala: analogni, digitalni, diskretni"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/obobshchennaya-harakteristika-signala-vidy-signalov-analogovyi-cifrovoi.html" rel="bookmark" title="Tipovi signala: analogni, digitalni, diskretni">Tipovi signala: analogni, digitalni, diskretni</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/klonirovanie-windows-7-na-drugoi-kompyuter-perenos-sistemy-bez-poteri-dannyh-na.html" rel="bookmark" title="Prebacivanje sistema bez gubitka podataka na drugi računar"><img width="218" height="150" class="entry-thumb" src="/uploads/f16f02fb31826b229fec4105311f60e2.jpg" alt="Prebacivanje sistema bez gubitka podataka na drugi računar" title="Prebacivanje sistema bez gubitka podataka na drugi računar"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/klonirovanie-windows-7-na-drugoi-kompyuter-perenos-sistemy-bez-poteri-dannyh-na.html" rel="bookmark" title="Prebacivanje sistema bez gubitka podataka na drugi računar">Prebacivanje sistema bez gubitka podataka na drugi računar</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/perenos-windows-7-novyi-disk-nachinaya-s-windows-vista-sysprep-vhodit-v-sostav-operacionnoi-sistemy.html" rel="bookmark" title="Počevši od Windows Viste, sysprep je uključen u operativni sistem"><img width="218" height="150" class="entry-thumb" src="/uploads/ae90a7a7d4e493220115342b4d853284.jpg" alt="Počevši od Windows Viste, sysprep je uključen u operativni sistem" title="Počevši od Windows Viste, sysprep je uključen u operativni sistem"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/perenos-windows-7-novyi-disk-nachinaya-s-windows-vista-sysprep-vhodit-v-sostav-operacionnoi-sistemy.html" rel="bookmark" title="Počevši od Windows Viste, sysprep je uključen u operativni sistem">Počevši od Windows Viste, sysprep je uključen u operativni sistem</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/neoficialnyi-internet-deep-web-ili-nevidimaya-storona-interneta-deep-web.html" rel="bookmark" title="Deep Web ili nevidljiva strana interneta"><img width="218" height="150" class="entry-thumb" src="/uploads/783f293cd6571652a398541ec7652246.jpg" alt="Deep Web ili nevidljiva strana interneta" title="Deep Web ili nevidljiva strana interneta"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/neoficialnyi-internet-deep-web-ili-nevidimaya-storona-interneta-deep-web.html" rel="bookmark" title="Deep Web ili nevidljiva strana interneta">Deep Web ili nevidljiva strana interneta</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/kak-ustanovit-zvuk-na-noutbuke-propal-zvuk-na-noutbuke-chto-delat.html" rel="bookmark" title="Izgubio sam zvuk na laptopu - šta da radim?"><img width="218" height="150" class="entry-thumb" src="/uploads/634f80cbd9d38061fd3cdbdb0a9cb31f.jpg" alt="Izgubio sam zvuk na laptopu - šta da radim?" title="Izgubio sam zvuk na laptopu - šta da radim?"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/kak-ustanovit-zvuk-na-noutbuke-propal-zvuk-na-noutbuke-chto-delat.html" rel="bookmark" title="Izgubio sam zvuk na laptopu - šta da radim?">Izgubio sam zvuk na laptopu - šta da radim?</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_12_5a23980e79990_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_12_5a23980e79990" > <div class="td-block-title-wrap"></div><div id=td_uid_12_5a23980e79990 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/ne-udaetsya-naiti-proverte-pravilno-li-ne-udaetsya-naiti-fail.html" rel="bookmark" title="Ne mogu pronaći provjeru da li je ispravna"><img width="218" height="150" class="entry-thumb" src="/uploads/7a63d957fbc5b6327736c24ee00d0790.jpg" alt="Ne mogu pronaći provjeru da li je ispravna" title="Ne mogu pronaći provjeru da li je ispravna"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/ne-udaetsya-naiti-proverte-pravilno-li-ne-udaetsya-naiti-fail.html" rel="bookmark" title="Ne mogu pronaći provjeru da li je ispravna">Ne mogu pronaći provjeru da li je ispravna</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/vindovs-10-ne-vozvrashchaetsya-v-ishodnoe-polozhenie-vosstanovlenie-sistemy.html" rel="bookmark" title="Windows System Restore"><img width="218" height="150" class="entry-thumb" src="/uploads/2900355ca1fd9f0dff2a1fc28547807e.jpg" alt="Windows System Restore" title="Windows System Restore"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/vindovs-10-ne-vozvrashchaetsya-v-ishodnoe-polozhenie-vosstanovlenie-sistemy.html" rel="bookmark" title="Windows System Restore">Windows System Restore</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/windows-10-smena-yazyka-sochetanie-klavish-izmenenie-nastroek-raskladki.html" rel="bookmark" title="Promijenite postavke rasporeda tastature"><img width="218" height="150" class="entry-thumb" src="/uploads/7949b327de87b376dd5edec9ba87d8d9.jpg" alt="Promijenite postavke rasporeda tastature" title="Promijenite postavke rasporeda tastature"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/windows-10-smena-yazyka-sochetanie-klavish-izmenenie-nastroek-raskladki.html" rel="bookmark" title="Promijenite postavke rasporeda tastature">Promijenite postavke rasporeda tastature</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/ustanovka-zvuka-na-pk-pochemu-ne-rabotayut-kolonki-i-na-kompyutere-net-zvuka.html" rel="bookmark" title="Zašto zvučnici ne rade i nema zvuka na računaru"><img width="218" height="150" class="entry-thumb" src="/uploads/fc257a9e13d7e9db2a15b4935a829149.jpg" alt="Zašto zvučnici ne rade i nema zvuka na računaru" title="Zašto zvučnici ne rade i nema zvuka na računaru"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/ustanovka-zvuka-na-pk-pochemu-ne-rabotayut-kolonki-i-na-kompyutere-net-zvuka.html" rel="bookmark" title="Zašto zvučnici ne rade i nema zvuka na računaru">Zašto zvučnici ne rade i nema zvuka na računaru</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/alisa-ty-budesh-govorit-alisa-yandeks-pomoshchnik-chto-eto-kak-skachat.html" rel="bookmark" title=""Alice" Yandex asistent - šta je to, kako preuzeti, pokrenuti"><img width="218" height="150" class="entry-thumb" src="/uploads/87c920674d286ae01e631fb51b8b22ed.jpg" alt=""Alice" Yandex asistent - šta je to, kako preuzeti, pokrenuti" title=""Alice" Yandex asistent - šta je to, kako preuzeti, pokrenuti"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/alisa-ty-budesh-govorit-alisa-yandeks-pomoshchnik-chto-eto-kak-skachat.html" rel="bookmark" title=""Alice" Yandex asistent - šta je to, kako preuzeti, pokrenuti">"Alice" Yandex asistent - šta je to, kako preuzeti, pokrenuti</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/udalit-vse-na-aifone-5-kak-polnostyu-steret-informaciyu-s-zh-stkogo.html" rel="bookmark" title="Kako potpuno izbrisati informacije sa tvrdog diska"><img width="218" height="150" class="entry-thumb" src="/uploads/9028370f4a9eaa94ace923c706b132b9.jpg" alt="Kako potpuno izbrisati informacije sa tvrdog diska" title="Kako potpuno izbrisati informacije sa tvrdog diska"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/udalit-vse-na-aifone-5-kak-polnostyu-steret-informaciyu-s-zh-stkogo.html" rel="bookmark" title="Kako potpuno izbrisati informacije sa tvrdog diska">Kako potpuno izbrisati informacije sa tvrdog diska</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_13_5a23980e7caa8_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_13_5a23980e7caa8" > <div class="td-block-title-wrap"></div><div id=td_uid_13_5a23980e7caa8 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/dvuhdyuimovyi-datalife-engine-versiya-dlya-pechati-sostoyalsya-vyhod-datalife-engine-v.html" rel="bookmark" title="DataLife Engine v je objavljen"><img width="218" height="150" class="entry-thumb" src="/uploads/eca5d9708476a369b63b4d195c118052.jpg" alt="DataLife Engine v je objavljen" title="DataLife Engine v je objavljen"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/dvuhdyuimovyi-datalife-engine-versiya-dlya-pechati-sostoyalsya-vyhod-datalife-engine-v.html" rel="bookmark" title="DataLife Engine v je objavljen">DataLife Engine v je objavljen</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/pri-inicializacii-diska-oshibka-nevernaya-funkciya-chto-delat-esli-vinchester.html" rel="bookmark" title="Što učiniti ako tvrdi disk daje ulazno/izlaznu grešku"><img width="218" height="150" class="entry-thumb" src="/uploads/fb78e20d2c8ff322b84c6a0d4eaba389.jpg" alt="Što učiniti ako tvrdi disk daje ulazno/izlaznu grešku" title="Što učiniti ako tvrdi disk daje ulazno/izlaznu grešku"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/pri-inicializacii-diska-oshibka-nevernaya-funkciya-chto-delat-esli-vinchester.html" rel="bookmark" title="Što učiniti ako tvrdi disk daje ulazno/izlaznu grešku">Što učiniti ako tvrdi disk daje ulazno/izlaznu grešku</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/ustanovka-vindovs-7-s-fleshki-na-asus-kak-pereustanovit-windows-na-noutbuke-asus.html" rel="bookmark" title="Kako ponovo instalirati Windows na Asus laptop?"><img width="218" height="150" class="entry-thumb" src="/uploads/a6bf82290a78c4727699c1fae735e772.jpg" alt="Kako ponovo instalirati Windows na Asus laptop?" title="Kako ponovo instalirati Windows na Asus laptop?"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/ustanovka-vindovs-7-s-fleshki-na-asus-kak-pereustanovit-windows-na-noutbuke-asus.html" rel="bookmark" title="Kako ponovo instalirati Windows na Asus laptop?">Kako ponovo instalirati Windows na Asus laptop?</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/chto-takoe-razgon-processora-po-shine-teoriya-i-praktika-razgona-processorov.html" rel="bookmark" title="Teorija i praksa overkloka Intel Skylake procesora na BCLK magistrali"><img width="218" height="150" class="entry-thumb" src="/uploads/77a05e4f9fb85a251b51eff5395af049.jpg" alt="Teorija i praksa overkloka Intel Skylake procesora na BCLK magistrali" title="Teorija i praksa overkloka Intel Skylake procesora na BCLK magistrali"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/chto-takoe-razgon-processora-po-shine-teoriya-i-praktika-razgona-processorov.html" rel="bookmark" title="Teorija i praksa overkloka Intel Skylake procesora na BCLK magistrali">Teorija i praksa overkloka Intel Skylake procesora na BCLK magistrali</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/aifon-5s-pishet-sboi-aktivacii-iphone-ne-udalos-aktivirovat-reshenie.html" rel="bookmark" title="IPhone nije uspjelo aktivirati - rješenje problema"><img width="218" height="150" class="entry-thumb" src="/uploads/fffa9456d992926972cb66656b1f64fd.jpg" alt="IPhone nije uspjelo aktivirati - rješenje problema" title="IPhone nije uspjelo aktivirati - rješenje problema"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/aifon-5s-pishet-sboi-aktivacii-iphone-ne-udalos-aktivirovat-reshenie.html" rel="bookmark" title="IPhone nije uspjelo aktivirati - rješenje problema">IPhone nije uspjelo aktivirati - rješenje problema</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://obanracer.ru/bs/kak-steret-vsyu-informaciyu-s-aifona-6-kak-polnostyu-steret.html" rel="bookmark" title="Kako potpuno izbrisati informacije sa tvrdog diska"><img width="218" height="150" class="entry-thumb" src="/uploads/2b2b09c80d97e4ca8d409dc2ddc84229.jpg" alt="Kako potpuno izbrisati informacije sa tvrdog diska" title="Kako potpuno izbrisati informacije sa tvrdog diska"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/bs/kak-steret-vsyu-informaciyu-s-aifona-6-kak-polnostyu-steret.html" rel="bookmark" title="Kako potpuno izbrisati informacije sa tvrdog diska">Kako potpuno izbrisati informacije sa tvrdog diska</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside> </div> </div> </div> </div> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span td-sub-footer-menu"> </div> <div class="td-pb-span td-sub-footer-copy">Copyright 2021 - Popravci računara i laptopa. Video kartice, hard diskovi, internet, monitori.</div> </div> </div> </div> </div> <style type="text/css" media="screen"> /* custom css theme panel */ .td-post-header .entry-title { font-weight: normal !important; } h1.entry-title { font-weight: normal !important; border-bottom:#c44c4c 2px dotted; } h1.entry-title:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .sf-menu ul .td-menu-item > a:hover, .sf-menu ul .sfHover > a, .sf-menu ul .current-menu-ancestor > a, .sf-menu ul .current-category-ancestor > a, .sf-menu ul .current-menu-item > a { color: #edf3f7; } .td-post-content h2 { border-bottom:#c44c4c 2px dotted;} .td-post-content h2:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-post-content h3 { border-bottom:#c44c4c 2px dotted;} .td-post-content h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .category-my .td-page-title { color:#c44c4c; font-weight: 400; font-size: 36px; } .post header .entry-title { line-height: 40px; } .td-category-description h2, .td-category-description h3 { color:#c44c4c;} .td-category-description h2 { border-bottom:#c44c4c 2px solid;} .td-category-description h2:before { content: "\f055"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description h3 { border-bottom:#c44c4c 2px solid;} .td-category-description h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description ol, .td-category-description ul { margin-top:20px !important; margin-bottom:20px !important;} .td-category-description ul, .td-post-content ul { padding:0; margin:0; list-style:none; clear:both;} .td-category-description ul li, .td-post-content ul li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ul li:before, .td-post-content ul li:before { content: "\f192"; font-family: "FontAwesome"; color:#c44c4c; position:absolute; left:-10px;} .td-category-description ol, .td-post-content ol { padding:0; margin:0 0 0 5px; list-style:none; counter-reset: lipoint; clear:both;} .td-category-description ol li, .td-post-content ol li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ol li:before, .td-post-content ol li:before { content: counter(lipoint); counter-increment: lipoint; color:#fff; position:absolute; left:-16px; background:#c44c4c; width:20px; height:20px; line-height:20px; text-align:center; -webkit-border-radius: 20px;border-radius: 20px; font-size:12px; top:3px;} .toc_list li:before { display:none} .td-header-style-9 .td-header-menu-wrap-full { /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#c44c4c+0,c10000+100 */ background: #c44c4c; /* Old browsers */ background: -moz-linear-gradient(top, #c44c4c 0%, #c10000 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, #c44c4c 0%,#c10000 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, #c44c4c 0%,#c10000 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c44c4c', endColorstr='#c10000',GradientType=0 ); /* IE6-9 */ } .sf-menu > li > a { color: #fff; } .td-header-style-9 .header-search-wrap .td-icon-search { color: #fff; } .td-affix a { color:#000 !important;} </style> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/table-of-contents-plus/front.min.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/wp-postratings/js/postratings-js.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/themes/Newspaper/js/tagdiv_theme.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var boxzilla_options = { "testMode":"","boxes":[]} ; /* ]]> */ </script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/boxzilla/assets/js/script.min.js'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.core.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.view.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/themes/baseline/js/prod/client.js'></script> <script type='text/javascript' src='/assets/client1.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/template-tags/item/js/prod/tag.item.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/template-tags/ui/js/prod/tag.ui.js'></script> <script type='text/javascript' src='https://obanracer.ru/wp-content/plugins/simple-lightbox/content-handlers/image/js/prod/handler.image.js'></script> <script> (function(){ var html_jquery_obj = jQuery('html'); if (html_jquery_obj.length && (html_jquery_obj.is('.ie8') || html_jquery_obj.is('.ie9'))) { var path = '/wp-content/themes/Newspaper/style.css'; jQuery.get(path, function(data) { var str_split_separator = '#td_css_split_separator'; var arr_splits = data.split(str_split_separator); var arr_length = arr_splits.length; if (arr_length > 1) { var dir_path = '/wp-content/themes/Newspaper'; var splited_css = ''; for (var i = 0; i < arr_length; i++) { if (i > 0) { arr_splits[i] = str_split_separator + ' ' + arr_splits[i]; } //jQuery('head').append('<style>' + arr_splits[i] + '</style>'); var formated_str = arr_splits[i].replace(/\surl\(\'(?!data\:)/gi, function regex_function(str) { return ' url(\'' + dir_path + '/' + str.replace(/url\(\'/gi, '').replace(/^\s+|\s+$/gm,''); } ); splited_css += "<style>" + formated_str + "</style>"; } var td_theme_css = jQuery('link#td-theme-css'); if (td_theme_css.length) { td_theme_css.after(splited_css); } } } ); } } )(); </script> </body> </html>