Kā strādāt ar XML dokumentiem Delphi? Konkrēti, izmantojot TXMLDocument? Izmantojot XML dokumenta objektu modeli.

Daudziem Delphi programmētājiem iestatījumu saglabāšana ir saistīta ar lietošanu INI failus savās programmās. Jāizvairās no šīs metodes izmantošanas vairāk vai mazāk nopietnos projektos, jo tā ierobežo elastību, kas neļauj turpināt programmas paplašināšanu. Ir vērts teikt, ka šī pieeja ir diezgan populāra, pateicoties tās lietošanas vienkāršībai un iebūvēto rīku klātbūtnei izstrādes vidē.

Tomēr ideāls variants programmu iestatījumu glabāšanai ir strukturēts XML failus. To priekšrocība ir tāda, ka parametru skaits var nebūt fiksēts. Lai to labāk izprastu, apskatīsim konkrētu piemēru.

Programmā USearch, noklikšķinot uz ieraksta, tiek parādīta konteksta izvēlne, kurā tiek parādīts vienumu saraksts. Šie vienumi ir komandas, kuras savukārt tiek ielādētas no iestatījumu faila. Ja iestatījumi tika saglabāti INI failu, programma varētu saglabāt un ielādēt noteiktu skaitu instrukciju, piemēram, 10 vai 50. Tiklīdz būs nepieciešama lielāka vērtība, kods būs attiecīgi jāpārraksta un jāpārkompilē.


Pieņemot pieeju, izmantojot XML failus, varēsim dinamiski ielādēt visus sadaļu parametrus. Tam visam konfigurācijas fails kļūs elegantāks, bez pārmērīgas parametru numerācijas. tomēr standarta līdzekļi strādāt ar XML Delfos ir daudz trūkumu, tāpēc iesaku izmantot standarta bibliotēka MSXML. Parasti tas ir iekļauts pēc noklusējuma operētājsistēmas Windows saime.


Savienot MSXML, mums ir jāģenerē interfeisa fails ar visu funkciju sarakstu, importējot to no COM servera. Kā importēt interfeisu, ir uzrakstīts diezgan daudz detalizētu rakstu, taču iesaku lejupielādēt failu MSXML2_TLB.PAS jau gatavs lietošanai. Pēc faila lejupielādes novietojiet to blakus savam projektam vai nometiet Delphi vides lib mapē. Tādējādi visas izveidotās programmas varēs izmantot moduli MSXML, jums vienkārši jāpievieno rindiņa MSXML2_TLB izmantošanai .

Skaidrības labad apsveriet šādu šīs bibliotēkas izmantošanas piemēru:

LoadProcedureData; var XMLDoc: DOMDocument; Sakne: IXMLDOMElement; begin XMLDoc:= CoDOMDocument.Create; XMLDoc.Load("settins.xml"); Root:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode("izmērs/platums").Teksts); Sakne:= nulle; XMLDoc:= nulle; beigas;

Vispirms tiek izveidots DOMDocument klases gadījums un pēc tam faila settings.xml saturs tiek ielādēts atmiņā. Tā kā saskaņā ar standartu jebkura XML failā ir jābūt saknes tagam (in Šis gadījums konfigurācija), tad mums tas jāiegūst, izmantojot funkciju Dokumenta elements. Pēc tam tiek parādīts saturs starp tagiem , kas savukārt atrodas starp tagiem . Tādējādi no faila settings.xml mūsu metode parādīs tekstu MessageBox "100 pikseļi".

500 pikseļi 100 pikseļi

Šeit tiek izmantota SelectSingleNode metode, kas kā parametru izmanto virkni

Neskatoties uz to, ka tēma par darbu ar XML Delfos ir plaši apspriesta internetā, jautājumi par šo tēmu diezgan bieži rodas visdažādākajos forumos.

Arī šo jau esmu publicējis, taču vēlos atgriezties pie reāla gadījuma, kad ātri analizēju XML failu un izvilku datus, ko es šodien darīju darbā. Man vajadzēja ne vairāk kā 5 minūtes, lai iegūtu nepieciešamos datus.

Fons. Šodien bija nepieciešams apstrādāt datus par instalētās programmas lietotāju datoros (jā, jā, mēs atklājam pirātus :)). Tehniskā nodaļa man sniedza šādu informāciju, kas iegūta no nenojaušajiem lietotājiem tīklā, izmantojot WMI. Viņu izmantotā programma ģenerē atskaites XML formātā. Attiecīgi viņi man atveda kalnu XML failu ar diezgan sarežģītu struktūru, no kuriem man vajadzēja izvilkt tikai instalēto programmatūras produktu nosaukumus.

Ārstēšana . Pārskatot pāris failus manuāli, sapratu, ka novecot nebūs ilgi, un nolēmu uzrakstīt nelielu pārveidotāju. Palaižot Delphi, es repozitorijā atlasīju XML DataBinding objektu un ievadīju tam vienu no failiem. Es atstāju visus iestatījumus un parametrus pēc noklusējuma, un rezultātā es izveidoju moduli ar liels daudzums klases un saskarnes, lai piekļūtu šī XML faila elementiem. Es ilgu laiku nesāku nodarboties ar klases struktūru, nekavējoties sāku rakstīt pārveidotāju.

Jaunā konsoles lietojumprogrammā es uzrakstīju diezgan vienkāršu kodu:


programma XML2TXT;

lietojumiem
veidlapas,
Klases, SysUtils,
SoftwareXML mapē "SoftwareXML.pas";

procedūra CovertXML2Text;
var
softbase: IXMLSTDSoftwareType;
i: vesels skaitlis;
sr: TSearchRec;
CurDir:string;
ExportFile: TStringList;
sākt
CurDir:= IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
ja FindFirst(CurDir+"*.xml", faAnyFile, sr) = 0, tad
atkārtojiet
ExportFile:= TStringList.Create;
softbase:= IelādētSTDSoftware(Pchar(CurDir+sr.Name));
i:= 0 līdz 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;
līdz FindNext(sr) 0;
beigas;

sākt
Pieteikums.Inicializēt;
CovertXML2Teksts;
beigas.

Tā rezultātā es saņēmu vienu mācību grāmatu katram tīkla datoram, kurā bija instalētās programmatūras saraksts.

Man šķiet, ka šis kods prasīs paskaidrojumus. Piemēram, kāpēc es izmantoju moduli Forms konsoles lietojumprogrammā un izsaucu procedūru Application.Initialize;

Patiesībā viss ir vienkārši - tas ir neliels uzlauzts, kas ļauj izmantot XML datu saistīšanu konsoles lietojumprogrammā. Jo tā spītīgi atteicās inicializēt klasi darbam ar XML. Es vēl neesmu noskaidrojis patiesos iemeslus - šodien laiks bija svarīgs, un tāpēc es pavadīju 4 no 5 minūtēm, lai cīnītos pret šo kļūdu. :) Domāju vēlāk tikt galā ar šo problēmu un uzrakstīt, kas ir īstais iemesls.

Dīvainā softbase klase tika izveidota, pamatojoties uz XML failu — tāds bija saknes elementa nosaukums, un softbase.InstalledSoftware.source.software[i].DisplayName — vienkārši pārvietojoties pa ligzdotajiem elementiem līdz vajadzīgajam un iegūstot tā vērtību.

Šādi izskatās viens no visvairāk. ātri veidi darbs ar XML Delphi.

XML arvien vairāk tiek izmantots, lai uzglabātu informāciju un apmainītos ar to starp lietojumprogrammām un vietnēm. Daudzās lietojumprogrammās šī valoda tiek izmantota kā bāzes valoda datu glabāšanai, citās - XML ​​datu eksportēšanai un importēšanai. No tā izriet, ka izstrādātājiem ir laiks padomāt par to, kā XML datus var izmantot savās lietojumprogrammās.

Šajā rakstā mēs apskatīsim XML dokumenta objektu modeli (DOM) un Microsoft tā ieviešanu, Microsoft XML DOM.

XML DOM ir objekta modelis, kas izstrādātājam nodrošina objektus XML failu ielādei un manipulācijām ar tiem. Objekta modelis sastāv no šādiem galvenajiem objektiem: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap un XMLDOMParseError. Katrs no šiem objektiem (izņemot XMLDOMParseError) satur rekvizītus un metodes, kas ļauj iegūt informāciju par objektu, manipulēt ar objekta vērtībām un struktūru un pārvietoties pa XML dokumenta struktūru.

Apskatīsim galvenos XML DOM objektus un sniegsim dažus piemērus to izmantošanai Borland Delphi.

XML DOM izmantošana programmā Borland Delphi

Lai Delphi lietojumprogrammās izmantotu Microsoft XML DOM, savā projektā ir jāiekļauj atbilstošā tipa bibliotēka. Lai to izdarītu, mēs izpildām komandu Project | Importēt tipa bibliotēku un dialoglodziņā Importēt tipa bibliotēku atlasiet Microsoft XML versijas 2.0 (versija 2.0) bibliotēku, kas parasti atrodas failā Windows\System\MSXML.DLL.

Pēc pogas Izveidot vienību noklikšķināšanas tiks izveidots MSXML_TLB interfeisa modulis, kas ļaus izmantot XML DOM objektus: DOMDocument, XMLDocument, XMLHTTPRequest un virkni citu, kas ieviesti MSXML.DLL bibliotēkā. Sarakstā Lietošanas ir jānorāda atsauce uz MSXML_TLB moduli.

XML DOM ierīce

Dokumenta objekta modelis attēlo XML dokumentu kā koka struktūru, kas sastāv no zariem. XML DOM API ļauj lietojumprogrammām šķērsot dokumentu koku un manipulēt ar tā zariem. Katrai filiālei var būt noteikts tips (DOMNodeType), saskaņā ar kuru tiek definētas vecākzaras un atvases. Lielākajā daļā XML dokumentu jūs atradīsiet elementu, atribūtu un teksta zarus. Atribūti ir īpašs atzaru veids, un tie nav atzari. Atribūti tiek pārvaldīti. īpašas metodes, ko nodrošina XML DOM objekti.

Papildus World Wide Web Consortium (W3C) ieteikto saskarņu ieviešanai Microsoft XML DOM ietver metodes, kas atbalsta XSL, XSL modeļus, nosaukumvietas un datu tipus. Piemēram, SelectNodes metode ļauj izmantot XSL modeļa sintaksi, lai atrastu filiāles noteiktā kontekstā, un TransformNode metode atbalsta XSL izmantošanu transformāciju veikšanai.

Pārbaudiet XML dokumentu

Kā XML dokumenta piemēru ņemsim mūzikas CD-ROM direktoriju, kam ir šāda struktūra:

Impērijas burleska Bobs Dilans ASV Kolumbija 10.90 1985 paslēp savu sirdi Bonija Tailore Apvienotā Karaliste CBS ieraksti 9.90 1988 ... Atbrīvo manu sirdi Džo Kokers ASV EMI 8.20 1987

Tagad mēs esam gatavi sākt apskatīt XML DOM objekta modeli, ko mēs sāksim ar XMLDOMDocument objektu.

XML dokuments — XMLDOMDokumenta objekts

Darbs ar XML dokumentu sākas ar tā ielādi. Lai to izdarītu, mēs izmantojam metodi Ielādēt, kurai ir tikai viens parametrs, kas norāda ielādējamā dokumenta URL. Ielādējot failus no lokālā diska, tiek norādīts tikai pilns faila nosaukums (šajā gadījumā protokolu file:/// var izlaist). Ja XML dokuments tiek saglabāts kā virkne, lai ielādētu dokumentu, izmantojiet LoadXML metodi.

Lai kontrolētu, kā dokuments tiek ielādēts (sinhroni vai asinhroni), izmantojiet rekvizītu Async. Pēc noklusējuma šis rekvizīts ir iestatīts uz True, lai norādītu, ka dokuments tiek ielādēts asinhroni un vadība tiek atgriezta lietojumprogrammā, pirms dokuments ir pilnībā ielādēts. Pretējā gadījumā dokuments tiek ielādēts sinhroni, un pēc tam jums ir jāpārbauda rekvizīta ReadyState vērtība, lai redzētu, vai dokuments ir ielādēts. Varat arī izveidot notikumu apdarinātāju OnReadyStateChange notikumam, kas saņems kontroli, kad mainīsies rekvizīta ReadyState vērtība.

Tālāk ir parādīts, kā ielādēt XML dokumentu, izmantojot ielādes metodi:

Izmanto ... MSXML_TLB ... procedūru TForm1.Button1Click(Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // // Šeit ir kods, kas manipulē // XML dokumentu un tā atzarus // XMLDoc:= Nil; beigas;

Kad dokuments ir ielādēts, mēs varam piekļūt tā rekvizītiem. Piemēram, rekvizīts NodeName satur vērtību #document, rekvizīts NodeTypeString satur vērtību dokumentu un URL rekvizīts satur vērtību file:///C:/DATA/DATA.xml.

Kļūdu apstrāde

Īpaši interesanti ir rekvizīti, kas saistīti ar dokumenta apstrādi, kad tas tiek ielādēts. Piemēram, rekvizīts ParseError atgriež XMLDOMParseError objektu, kas satur informāciju par kļūdu, kas radās dokumenta apstrādes laikā.

Lai rakstītu kļūdu apdarinātāju, varat pievienot šādu kodu:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load('C:\DATA\DATA.xml'); XMLError:= XMLDoc.ParseError; Ja XMLError.ErrorCode<>0 Tad // // Šeit mēs apstrādājam kļūdu // Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nulle;

Lai uzzinātu, kāda informācija tiek atgriezta kļūdas gadījumā, mainiet šādu direktorija ierakstu:

Impērijas burleska Bobs Dilans ASV Kolumbija 10.90 1985

noņemiet noslēguma elementu otrajā rindā:</p><p> <CD> <TITLE>Impērijas burleska <ARTIST>Bobs Dilans</ARTIST> <COUNTRY>ASV</COUNTRY> <COMPANY>Kolumbija</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Tagad ierakstīsim kodu, kas atgriež XMLDOMParseError objekta rekvizītu vērtības:</p><p>XMLError:= XMLDoc.ParseError; Ja XMLError.ErrorCode<>0 Pēc tam ar XMLError, Memo1.Lines sākas Add('File:' + URL); Add('Kods:' + IntToStr(ErrorCode)); Add('Kļūda:' + Iemesls); Add('Teksts:' + SrcTeksts); Add('Line: ' + IntToStr(Line)); Add('Position:' + IntToStr(LinePos)); beigas Else Memo1.Lines.Add(XMLDoc.XML); beigas;</p><p>un palaidiet mūsu lietojumprogrammu. Rezultātā mēs saņemam šādu kļūdu informāciju.</p> <p>Kā redzams no iepriekš minētā piemēra, XMLDOMParseError objekta atgrieztā informācija ir pilnīgi pietiekama, lai atrastu kļūdu un saprastu tās rašanās iemeslu.</p> <p>Tagad atjaunosim noslēguma elementu <TITLE>mūsu dokumentā un turpiniet diskusiju par XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Piekļuve dokumentu kokam</h2> <p>Lai piekļūtu dokumentu kokam, varat iegūt saknes elementu un pēc tam atkārtot tā pakārtotos zarus vai atrast kādu konkrētu zaru. Pirmajā gadījumā saknes elementu iegūstam caur rekvizītu DocumentElement, kas atgriež XMLDOMNode tipa objektu. Tālāk ir parādīts, kā izmantot rekvizītu DocumentElement, lai iegūtu katra pakārtotā elementa saturu.</p><p>VarNode: IXMLDOMNode; Sakne: IXMLDOMElement; I: vesels skaitlis; ... Root:= XMLDoc.DocumentElement; No I:= 0 līdz Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Memo1.Lines.Add(Node.Text); beigas;</p><p>Mūsu XML dokumentam mēs iegūsim šādu tekstu.</p> <p>Ja mūs interesē kāda konkrēta filiāle vai filiāle zem pirmā atzara, mēs varam izmantot vai nu metodi NodeFromID, vai XMLDOMDocument objekta metodi GetElementByTagName.</p> <p>Metodei NodeFromID ir nepieciešams unikāls identifikators, kas definēts XML shēmā vai dokumenta tipa definīcijā (DTD), un atgriež filiāli ar šo identifikatoru.</p> <p>Metodei GetElementByTagName ir nepieciešama virkne ar noteiktu elementu (tagu), un tā atgriež visus zarus ar šo elementu. Tālāk ir parādīts, kā izmantot šo metodi, lai atrastu visus mūsu CD-ROM direktorijā esošos māksliniekus:</p><p>Mezgli: IXMLDOMNodeList; Mezgls: IXMLDOMNode; ... Nodes:= XMLdoc.GetElementsByTagName('ARTIST'); No I:= 0 līdz Nodes.Length-1 do Begin Node:= Nodes.Item[I]; Memo1.Lines.Add(Node.Text); beigas;</p><p>Mūsu XML dokumentam mēs iegūsim šādu tekstu</p> <p>Ņemiet vērā, ka XMLDOMNode objekta SelectNodes metode nodrošina elastīgāku veidu, kā piekļūt dokumentu zariem. Bet vairāk par to zemāk.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumenta filiāle - XMLDOMNode objekts</h2> <p>XMLDOMNode objekts apzīmē dokumenta atzaru. Mēs jau esam saskārušies ar šo objektu, kad saņēmām dokumenta saknes elementu:</p><p>Root:= XMLDoc.DocumentElement;</p><p>Lai iegūtu informāciju par XML dokumenta atzaru, varat izmantot XMLDOMNode objekta rekvizītus (1. tabula).</p> <p>Lai piekļūtu filiālē saglabātajiem datiem, parasti tiek izmantots rekvizīts NodeValue (pieejams atribūtiem, teksta zariem, komentāriem, apstrādes instrukcijām un CDATA sadaļām), rekvizīts Text, kas atgriež filiāles teksta saturu, vai NodeTypedValue. īpašums. Tomēr pēdējo var izmantot tikai filiālēm ar drukātiem elementiem.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigācija dokumentu kokā</h3> <p>Objekts XMLDOMNode nodrošina daudzus veidus, kā pārvietoties dokumentu kokā. Piemēram, vecākajai filiālei var piekļūt, izmantojot rekvizītu ParentNode (XMLDOMNode tips), pakārtotajiem zariem var piekļūt, izmantojot rekvizītus ChildNodes (XMLDOMNodeList tips), FirstChild un LastChild (XMLDOMNode tips) un tā tālāk. Rekvizīts OwnerDocument atgriež XMLDOMDocument tipa objektu, kas identificē pašu XML dokumentu. Iepriekš uzskaitītie rekvizīti atvieglo navigāciju dokumentu kokā.</p> <p>Tagad atkārtosim visas XML dokumenta filiāles:</p><p>Root:= XMLDoc.DocumentElement; No I:= 0 līdz Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Ja Node.HasChildNodes then GetChilds(Node,0); beigas;</p><p>Kā minēts iepriekš, XMLDOMNode objekta SelectNodes nodrošina elastīgāku veidu, kā piekļūt dokumentu atzariem. Turklāt ir SelectSingleNode metode, kas atgriež tikai pirmo dokumenta atzaru. Abas šīs metodes ļauj norādīt XSL veidnes filiāļu atrašanai.</p> <p>Apsveriet, kā izmantot SelectNodes metodi, lai izgūtu visas filiāles, kurām ir CD atzars un PRICE apakšnozare:</p><p>Root:= XMLDoc.DocumentElement; Nodes:= Root.SelectNodes('CD/CENA');</p><p>Visas CD filiāles PRICE apakšnozares tiks ievietotas Nodes kolekcijā. Mēs atgriezīsimies pie diskusijas par XSL veidnēm nedaudz vēlāk.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulācijas ar bērnu zariem</h3> <p>Lai manipulētu ar bērnu zariem, mēs varam izmantot XMLDOMNode objekta metodes (2. tabula).</p> <p>Lai pilnībā noņemtu ierakstu par pirmo disku, jums ir jāpalaiž šāds kods:</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // Iegūt saknes elementu Root:= XMLDoc.DocumentElement; Mezgls:= Sakne; // Noņemt pirmo atzaru Node.RemoveChild(Node.FirstChild);</p><p>Ņemiet vērā, ka šajā piemērā mēs dzēšam pirmo atzarojumu. Tālāk ir parādīts, kā noņemt pirmā atzara pirmo elementu:</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // Iegūt saknes elementu Root:= XMLDoc.DocumentElement; // un pirmais atzars Node:= Root.FirstChild; // Noņemt pirmo atzaru Node.RemoveChild(Node.FirstChild);</p><p>Iepriekš minētajā piemērā mēs neesam izdzēsuši pirmo filiāli <CD>…</CD>, un pirmais zara elements ir <TITLE>….

Tagad pievienosim jaunu filiāli. Tālāk ir norādīts kods, kas parāda, kā pievienot jaunu mūzikas CD-ROM ierakstu:

Var NewNode: IXMLDOMNode; Bērns: IXMLDOMNode; ... // Izveidot jaunu filiāli - NewNode:= XMLDoc.CreateNode(1, 'CD', ''); // Pievienot elementu Child:= XMLDoc.CreateNode(1,'NOSAUKUMS',''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'Pink Floyd'; // Pievienot elementu <ARTIST>Child:= XMLDoc.CreateNode(1, 'IZPILDĪTĀJS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'Division Bell'; // Pievienot elementu <COUNTRY>Child:= XMLDoc.CreateNode(1, 'VALSTS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'UK'; // Pievienot elementu <COMPANY>Child:= XMLDoc.CreateNode(1, 'UZŅĒMUMS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'EMI Records Ltd.'; // Pievienot elementu <PRICE>Child:= XMLDoc.CreateNode(1, 'CENA', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= '11,99"; // Pievienojiet elementu <YEAR>Child:= XMLDoc.CreateNode(1, 'YEAR', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= '1994'; // Un pievieno filiāli Root.AppendChild(NewNode); ...</p><p>Iepriekš minētais kods parāda šādu darbību secību jaunas filiāles pievienošanai:</p> <ul><li>Jaunas filiāles izveide, izmantojot CreateNode metodi: <ul><li>elementa izveide, izmantojot CreateNode metodi;</li> <li>elementa pievienošana zaram, izmantojot metodi AppendChild;</li> <li>elementa vērtības iestatīšana, izmantojot rekvizītu Text;</li> <li>... atkārtojiet visiem elementiem.</li> </ul></li> <li>Jaunas filiāles pievienošana dokumentam, izmantojot metodi AppendChild.</li> </ul><p>Atcerieties, ka, izmantojot metodi AppendChild, koka galā tiek pievienots zars. Lai pievienotu zaru noteiktai vietai kokā, ir jāizmanto metode InsertBefore.</p> <h2>Nozaru kopa - XMLDOMNodeList objekts</h2> <p>Objektā XMLNodeList ir zaru saraksts, ko var izveidot, izmantojot SelectNodes vai GetElementsByTagName metodes, vai izgūt no rekvizīta ChildNodes.</p> <p>Mēs jau esam redzējuši šī objekta izmantošanu piemērā, kas sniegts sadaļā "Navigācija dokumentu kokā". Šeit mēs sniedzam dažas teorētiskas piezīmes.</p> <p>Zaru skaitu sarakstā var iegūt kā rekvizīta Length vērtību. Atzariem ir indeksi no 0 līdz Length-1, un katrs atsevišķais zars ir pieejams caur vienumu masīva elementu ar atbilstošo indeksu.</p> <p>Pārvietošanos pa zaru sarakstu var veikt arī, izmantojot NextNode metodi, kas atgriež nākamo zaru sarakstā, vai nulli, ja pašreizējā filiāle ir pēdējā. Lai atgrieztos saraksta sākumā, izsauciet Reset metodi.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Izveidojiet un saglabājiet dokumentus</h2> <p>Tātad, mēs esam redzējuši, kā esošajiem XML dokumentiem varat pievienot filiāles un elementus. Tagad izveidosim XML dokumentu lidojumā. Pirmkārt, atcerieties, ka dokumentu var ielādēt ne tikai no URL, bet arī no parastās virknes. Tālāk ir parādīts, kā izveidot saknes elementu, ko pēc tam var izmantot, lai dinamiski izveidotu pārējos elementus (par ko mēs jau runājām sadaļā Manipulating Child Branches):</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; S: WideString; ...S:=' <CATALOG></CATALOG>'; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.LoadXML(S); Root:= XMLDoc.DocumentElement; Node:= XMLDoc.CreateNode(1, 'CD', ''); Root.AppendChild(Node); Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nulle;</p><p>Pēc XML dokumenta izveidošanas mēs to saglabājam failā, izmantojot Saglabāšanas metodi. Piemēram:</p> <p>XMLDoc.Save('C:\DATA\NEWCD.XML');</p> <p>Papildus saglabāšanai failā, saglabāšanas metode ļauj saglabāt XML dokumentu jaunā XMLDOMDocument objektā. Šajā gadījumā dokuments tiek pilnībā apstrādāts, un rezultātā tiek pārbaudīta tā struktūra un sintakse. Tālāk ir parādīts, kā saglabāt dokumentu citā objektā:</p><p>Procedūra TForm1.Button2Click(Sūtītājs: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2:= CoDOMDocument.Create; XMLDoc.Save(XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Nulle; beigas;</p><p>Visbeidzot, saglabāšanas metode ļauj arī saglabāt XML dokumentu citos COM objektos, kas atbalsta IStream, IPersistStream vai IPersistStreamInit saskarnes.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Izmantojot XSL veidnes</h2> <p>Apspriežot XMLDOMNode objekta SelectNodes metodi, mēs minējām, ka tā nodrošina elastīgāku veidu, kā piekļūt dokumentu zariem. Elastība ir tāda, ka varat norādīt XSL veidni kā zaru atlases kritēriju. Šādas veidnes nodrošina jaudīgu mehānismu informācijas atrašanai XML dokumentos. Piemēram, lai iegūtu visu mūsu katalogā esošo mūzikas CD-ROM nosaukumu sarakstu, mēs varētu izpildīt šādu vaicājumu:</p><p>Lai noskaidrotu, kuri mākslinieku kompaktdiski tika izdoti ASV, vaicājums tiek veidots šādi:</p><p>Nodes:= Root.SelectNodes('CD/IZPILDĪTĀJS');</p><p>Tālāk ir parādīts, kā direktorijā atrast pirmo disku:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Un pēdējais:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Lai atrastu Boba Dilana diskus, varat izpildīt šādu vaicājumu:</p><p>Nodes:= Root.SelectNodes('CD[$any$ ARTIST="Bob Dilans"]/TITLE');</p><p>un, lai iegūtu pēc 1985. gada izdoto disku sarakstu, mēs izpildām šādu vaicājumu:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Detalizētākai diskusijai par XSL sintakse ir nepieciešama atsevišķa ziņa. Lai ieintriģētu lasītājus un veicinātu turpmāku izpēti, es minēšu tikai vienu nelielu piemēru iespējamai XSL izmantošanai. Pieņemsim, ka mums ir jāpārvērš mūsu direktorijs par parastu HTML tabulu. Izmantojot tradicionālās metodes, mums jāiet cauri visiem koka zariem un katram saņemtajam elementam jāveido atbilstošās atzīmes. <TD>…</TD>.</p> <p>Izmantojot XSL, mēs vienkārši izveidojam veidni (vai stila lapu), kurā norādām, ko un kā pārveidot. Pēc tam mēs ievietojam šo veidni mūsu katalogā — un esat pabeidzis: mums ir XSL veidnes teksts, kas pārvērš katalogu par tabulu (2. saraksts).</p> <p>Kods XSL veidnes pārklājumam mūsu direktorijā izskatās šādi:</p><p>Procedūra TForm1.Button2Click(Sūtītājs: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc:= CoDOMDocument.Create; XSLDoc.Load('C:\DATI\DATI.xsl'); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Nulle; beigas;</p><p>Noslēdzot mūsu diskusiju par XSL, jāsaka, ka šobrīd šī valoda tiek aktīvi izmantota transformācijai starp dažādiem XML dokumentiem, kā arī dokumentu formatēšanai.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Secinājums</h2> <p>Acīmredzamu iemeslu dēļ nav iespējams vienā rakstā aptvert visus Microsoft XML DOM objektus un sniegt to izmantošanas piemērus. Šeit mēs esam pieskārušies tikai galvenajiem jautājumiem par XML DOM izmantošanu lietojumprogrammās. Tabulā. 3. attēlā parādīti visi objekti, kas ieviesti Microsoft XML DOM.</p> <p>ComputerPress 12"2000</p> <p>XML arvien vairāk tiek izmantots, lai uzglabātu informāciju un apmainītos ar to starp lietojumprogrammām un vietnēm. Daudzās lietojumprogrammās šī valoda tiek izmantota kā bāzes valoda datu glabāšanai, citās - XML ​​datu eksportēšanai un importēšanai. No tā izriet, ka izstrādātājiem ir laiks padomāt par to, kā XML datus var izmantot savās lietojumprogrammās.</p> <p>Šajā rakstā mēs apskatīsim XML dokumenta objektu modeli (DOM) un Microsoft tā ieviešanu, Microsoft XML DOM.</p> <p>XML DOM ir objekta modelis, kas izstrādātājam nodrošina objektus XML failu ielādei un manipulācijām ar tiem. Objekta modelis sastāv no šādiem galvenajiem objektiem: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap un XMLDOMParseError. Katrs no šiem objektiem (izņemot XMLDOMParseError) satur rekvizītus un metodes, kas ļauj iegūt informāciju par objektu, manipulēt ar objekta vērtībām un struktūru un pārvietoties pa XML dokumenta struktūru.</p> <p>Apskatīsim galvenos XML DOM objektus un sniegsim dažus piemērus to izmantošanai Borland Delphi.</p> <h2>XML DOM izmantošana programmā Borland Delphi</h2> <p>Lai Delphi lietojumprogrammās izmantotu Microsoft XML DOM, savā projektā ir jāiekļauj atbilstošā tipa bibliotēka. Lai to izdarītu, mēs izpildām komandu Project | Importēt tipa bibliotēku un dialoglodziņā Importēt tipa bibliotēku atlasiet Microsoft XML versijas 2.0 (versija 2.0) bibliotēku, kas parasti atrodas failā Windows\System\MSXML.DLL.</p> <p>Pēc pogas Izveidot vienību noklikšķināšanas tiks izveidots MSXML_TLB interfeisa modulis, kas ļaus izmantot XML DOM objektus: DOMDocument, XMLDocument, XMLHTTPRequest un virkni citu, kas ieviesti MSXML.DLL bibliotēkā. Sarakstā Lietošanas ir jānorāda atsauce uz MSXML_TLB moduli.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XML DOM ierīce</h2> <p>Dokumenta objekta modelis attēlo XML dokumentu kā koka struktūru, kas sastāv no zariem. XML DOM API ļauj lietojumprogrammām šķērsot dokumentu koku un manipulēt ar tā zariem. Katrai filiālei var būt noteikts tips (DOMNodeType), saskaņā ar kuru tiek definētas vecākzaras un atvases. Lielākajā daļā XML dokumentu jūs atradīsiet elementu, atribūtu un teksta zarus. Atribūti ir īpašs atzaru veids, un tie nav atzari. Ar atribūtiem tiek manipulētas, izmantojot īpašas metodes, ko nodrošina XML DOM objekti.</p> <p>Papildus World Wide Web Consortium (W3C) ieteikto saskarņu ieviešanai Microsoft XML DOM ietver metodes, kas atbalsta XSL, XSL modeļus, nosaukumvietas un datu tipus. Piemēram, SelectNodes metode ļauj izmantot XSL modeļa sintaksi, lai atrastu filiāles noteiktā kontekstā, un TransformNode metode atbalsta XSL izmantošanu transformāciju veikšanai.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Pārbaudiet XML dokumentu</h2> <p>Kā XML dokumenta piemēru ņemsim mūzikas CD-ROM direktoriju, kam ir šāda struktūra:</p><p> <?xml version=”1.0"?> <CATALOG> <CD> <TITLE>Impērijas burleska Bobs Dilans ASV Kolumbija 10.90 1985 paslēp savu sirdi Bonija Tailore Apvienotā Karaliste CBS ieraksti 9.90 1988 ... Atbrīvo manu sirdi Džo Kokers ASV EMI 8.20 1987

Tagad mēs esam gatavi sākt apskatīt XML DOM objekta modeli, ko mēs sāksim ar XMLDOMDocument objektu.

XML dokuments — XMLDOMDokumenta objekts

Darbs ar XML dokumentu sākas ar tā ielādi. Lai to izdarītu, mēs izmantojam metodi Ielādēt, kurai ir tikai viens parametrs, kas norāda ielādējamā dokumenta URL. Ielādējot failus no lokālā diska, tiek norādīts tikai pilns faila nosaukums (šajā gadījumā protokolu file:/// var izlaist). Ja XML dokuments tiek saglabāts kā virkne, lai ielādētu dokumentu, izmantojiet LoadXML metodi.

Lai kontrolētu, kā dokuments tiek ielādēts (sinhroni vai asinhroni), izmantojiet rekvizītu Async. Pēc noklusējuma šis rekvizīts ir iestatīts uz True, lai norādītu, ka dokuments tiek ielādēts asinhroni un vadība tiek atgriezta lietojumprogrammā, pirms dokuments ir pilnībā ielādēts. Pretējā gadījumā dokuments tiek ielādēts sinhroni, un pēc tam jums ir jāpārbauda rekvizīta ReadyState vērtība, lai redzētu, vai dokuments ir ielādēts. Varat arī izveidot notikumu apdarinātāju OnReadyStateChange notikumam, kas saņems kontroli, kad mainīsies rekvizīta ReadyState vērtība.

Tālāk ir parādīts, kā ielādēt XML dokumentu, izmantojot ielādes metodi:

Izmanto ... MSXML_TLB ... procedūru TForm1.Button1Click(Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // // Šeit ir kods, kas manipulē // XML dokumentu un tā atzarus // XMLDoc:= Nil; beigas;

Kad dokuments ir ielādēts, mēs varam piekļūt tā rekvizītiem. Piemēram, rekvizīts NodeName satur vērtību #document, rekvizīts NodeTypeString satur vērtību dokumentu un URL rekvizīts satur vērtību file:///C:/DATA/DATA.xml.

Kļūdu apstrāde

Īpaši interesanti ir rekvizīti, kas saistīti ar dokumenta apstrādi, kad tas tiek ielādēts. Piemēram, rekvizīts ParseError atgriež XMLDOMParseError objektu, kas satur informāciju par kļūdu, kas radās dokumenta apstrādes laikā.

Lai rakstītu kļūdu apdarinātāju, varat pievienot šādu kodu:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load('C:\DATA\DATA.xml'); XMLError:= XMLDoc.ParseError; Ja XMLError.ErrorCode<>0 Tad // // Šeit mēs apstrādājam kļūdu // Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nulle;

Lai uzzinātu, kāda informācija tiek atgriezta kļūdas gadījumā, mainiet šādu direktorija ierakstu:

Impērijas burleska Bobs Dilans ASV Kolumbija 10.90 1985

noņemiet noslēguma elementu otrajā rindā:</p><p> <CD> <TITLE>Impērijas burleska <ARTIST>Bobs Dilans</ARTIST> <COUNTRY>ASV</COUNTRY> <COMPANY>Kolumbija</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Tagad ierakstīsim kodu, kas atgriež XMLDOMParseError objekta rekvizītu vērtības:</p><p>XMLError:= XMLDoc.ParseError; Ja XMLError.ErrorCode<>0 Pēc tam ar XMLError, Memo1.Lines sākas Add('File:' + URL); Add('Kods:' + IntToStr(ErrorCode)); Add('Kļūda:' + Iemesls); Add('Teksts:' + SrcTeksts); Add('Line: ' + IntToStr(Line)); Add('Position:' + IntToStr(LinePos)); beigas Else Memo1.Lines.Add(XMLDoc.XML); beigas;</p><p>un palaidiet mūsu lietojumprogrammu. Rezultātā mēs saņemam šādu kļūdu informāciju.</p> <p>Kā redzams no iepriekš minētā piemēra, XMLDOMParseError objekta atgrieztā informācija ir pilnīgi pietiekama, lai atrastu kļūdu un saprastu tās rašanās iemeslu.</p> <p>Tagad atjaunosim noslēguma elementu <TITLE>mūsu dokumentā un turpiniet diskusiju par XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Piekļuve dokumentu kokam</h2> <p>Lai piekļūtu dokumentu kokam, varat iegūt saknes elementu un pēc tam atkārtot tā pakārtotos zarus vai atrast kādu konkrētu zaru. Pirmajā gadījumā saknes elementu iegūstam caur rekvizītu DocumentElement, kas atgriež XMLDOMNode tipa objektu. Tālāk ir parādīts, kā izmantot rekvizītu DocumentElement, lai iegūtu katra pakārtotā elementa saturu.</p><p>VarNode: IXMLDOMNode; Sakne: IXMLDOMElement; I: vesels skaitlis; ... Root:= XMLDoc.DocumentElement; No I:= 0 līdz Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Memo1.Lines.Add(Node.Text); beigas;</p><p>Mūsu XML dokumentam mēs iegūsim šādu tekstu.</p> <p>Ja mūs interesē kāda konkrēta filiāle vai filiāle zem pirmā atzara, mēs varam izmantot vai nu metodi NodeFromID, vai XMLDOMDocument objekta metodi GetElementByTagName.</p> <p>Metodei NodeFromID ir nepieciešams unikāls identifikators, kas definēts XML shēmā vai dokumenta tipa definīcijā (DTD), un atgriež filiāli ar šo identifikatoru.</p> <p>Metodei GetElementByTagName ir nepieciešama virkne ar noteiktu elementu (tagu), un tā atgriež visus zarus ar šo elementu. Tālāk ir parādīts, kā izmantot šo metodi, lai atrastu visus mūsu CD-ROM direktorijā esošos māksliniekus:</p><p>Mezgli: IXMLDOMNodeList; Mezgls: IXMLDOMNode; ... Nodes:= XMLdoc.GetElementsByTagName('ARTIST'); No I:= 0 līdz Nodes.Length-1 do Begin Node:= Nodes.Item[I]; Memo1.Lines.Add(Node.Text); beigas;</p><p>Mūsu XML dokumentam mēs iegūsim šādu tekstu</p> <p>Ņemiet vērā, ka XMLDOMNode objekta SelectNodes metode nodrošina elastīgāku veidu, kā piekļūt dokumentu zariem. Bet vairāk par to zemāk.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumenta filiāle - XMLDOMNode objekts</h2> <p>XMLDOMNode objekts apzīmē dokumenta atzaru. Mēs jau esam saskārušies ar šo objektu, kad saņēmām dokumenta saknes elementu:</p><p>Root:= XMLDoc.DocumentElement;</p><p>Lai iegūtu informāciju par XML dokumenta atzaru, varat izmantot XMLDOMNode objekta rekvizītus (1. tabula).</p> <p>Lai piekļūtu filiālē saglabātajiem datiem, parasti tiek izmantots rekvizīts NodeValue (pieejams atribūtiem, teksta zariem, komentāriem, apstrādes instrukcijām un CDATA sadaļām), rekvizīts Text, kas atgriež filiāles teksta saturu, vai NodeTypedValue. īpašums. Tomēr pēdējo var izmantot tikai filiālēm ar drukātiem elementiem.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigācija dokumentu kokā</h3> <p>Objekts XMLDOMNode nodrošina daudzus veidus, kā pārvietoties dokumentu kokā. Piemēram, vecākajai filiālei var piekļūt, izmantojot rekvizītu ParentNode (XMLDOMNode tips), pakārtotajiem zariem var piekļūt, izmantojot rekvizītus ChildNodes (XMLDOMNodeList tips), FirstChild un LastChild (XMLDOMNode tips) un tā tālāk. Rekvizīts OwnerDocument atgriež XMLDOMDocument tipa objektu, kas identificē pašu XML dokumentu. Iepriekš uzskaitītie rekvizīti atvieglo navigāciju dokumentu kokā.</p> <p>Tagad atkārtosim visas XML dokumenta filiāles:</p><p>Root:= XMLDoc.DocumentElement; No I:= 0 līdz Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I]; Ja Node.HasChildNodes then GetChilds(Node,0); beigas;</p><p>Kā minēts iepriekš, XMLDOMNode objekta SelectNodes nodrošina elastīgāku veidu, kā piekļūt dokumentu atzariem. Turklāt ir SelectSingleNode metode, kas atgriež tikai pirmo dokumenta atzaru. Abas šīs metodes ļauj norādīt XSL veidnes filiāļu atrašanai.</p> <p>Apsveriet, kā izmantot SelectNodes metodi, lai izgūtu visas filiāles, kurām ir CD atzars un PRICE apakšnozare:</p><p>Root:= XMLDoc.DocumentElement; Nodes:= Root.SelectNodes('CD/CENA');</p><p>Visas CD filiāles PRICE apakšnozares tiks ievietotas Nodes kolekcijā. Mēs atgriezīsimies pie diskusijas par XSL veidnēm nedaudz vēlāk.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulācijas ar bērnu zariem</h3> <p>Lai manipulētu ar bērnu zariem, mēs varam izmantot XMLDOMNode objekta metodes (2. tabula).</p> <p>Lai pilnībā noņemtu ierakstu par pirmo disku, jums ir jāpalaiž šāds kods:</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // Iegūt saknes elementu Root:= XMLDoc.DocumentElement; Mezgls:= Sakne; // Noņemt pirmo atzaru Node.RemoveChild(Node.FirstChild);</p><p>Ņemiet vērā, ka šajā piemērā mēs dzēšam pirmo atzarojumu. Tālāk ir parādīts, kā noņemt pirmā atzara pirmo elementu:</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATI\DATI.xml'); // Iegūt saknes elementu Root:= XMLDoc.DocumentElement; // un pirmais atzars Node:= Root.FirstChild; // Noņemt pirmo atzaru Node.RemoveChild(Node.FirstChild);</p><p>Iepriekš minētajā piemērā mēs neesam izdzēsuši pirmo filiāli <CD>…</CD>, un pirmais zara elements ir <TITLE>….

Tagad pievienosim jaunu filiāli. Tālāk ir norādīts kods, kas parāda, kā pievienot jaunu mūzikas CD-ROM ierakstu:

Var NewNode: IXMLDOMNode; Bērns: IXMLDOMNode; ... // Izveidot jaunu filiāli - NewNode:= XMLDoc.CreateNode(1, 'CD', ''); // Pievienot elementu Child:= XMLDoc.CreateNode(1,'NOSAUKUMS',''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'Pink Floyd'; // Pievienot elementu <ARTIST>Child:= XMLDoc.CreateNode(1, 'IZPILDĪTĀJS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'Division Bell'; // Pievienot elementu <COUNTRY>Child:= XMLDoc.CreateNode(1, 'VALSTS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'UK'; // Pievienot elementu <COMPANY>Child:= XMLDoc.CreateNode(1, 'UZŅĒMUMS', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= 'EMI Records Ltd.'; // Pievienot elementu <PRICE>Child:= XMLDoc.CreateNode(1, 'CENA', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= '11,99"; // Pievienojiet elementu <YEAR>Child:= XMLDoc.CreateNode(1, 'YEAR', ''); // Pievienot elementu NewNode.AppendChild(Child); // Un iestatiet tā vērtību Child.Text:= '1994'; // Un pievieno filiāli Root.AppendChild(NewNode); ...</p><p>Iepriekš minētais kods parāda šādu darbību secību jaunas filiāles pievienošanai:</p> <ul><li>Jaunas filiāles izveide, izmantojot CreateNode metodi: <ul><li>elementa izveide, izmantojot CreateNode metodi;</li> <li>elementa pievienošana zaram, izmantojot metodi AppendChild;</li> <li>elementa vērtības iestatīšana, izmantojot rekvizītu Text;</li> <li>... atkārtojiet visiem elementiem.</li> </ul></li> <li>Jaunas filiāles pievienošana dokumentam, izmantojot metodi AppendChild.</li> </ul><p>Atcerieties, ka, izmantojot metodi AppendChild, koka galā tiek pievienots zars. Lai pievienotu zaru noteiktai vietai kokā, ir jāizmanto metode InsertBefore.</p> <h2>Nozaru kopa - XMLDOMNodeList objekts</h2> <p>Objektā XMLNodeList ir zaru saraksts, ko var izveidot, izmantojot SelectNodes vai GetElementsByTagName metodes, vai izgūt no rekvizīta ChildNodes.</p> <p>Mēs jau esam redzējuši šī objekta izmantošanu piemērā, kas sniegts sadaļā "Navigācija dokumentu kokā". Šeit mēs sniedzam dažas teorētiskas piezīmes.</p> <p>Zaru skaitu sarakstā var iegūt kā rekvizīta Length vērtību. Atzariem ir indeksi no 0 līdz Length-1, un katrs atsevišķais zars ir pieejams caur vienumu masīva elementu ar atbilstošo indeksu.</p> <p>Pārvietošanos pa zaru sarakstu var veikt arī, izmantojot NextNode metodi, kas atgriež nākamo zaru sarakstā, vai nulli, ja pašreizējā filiāle ir pēdējā. Lai atgrieztos saraksta sākumā, izsauciet Reset metodi.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Izveidojiet un saglabājiet dokumentus</h2> <p>Tātad, mēs esam redzējuši, kā esošajiem XML dokumentiem varat pievienot filiāles un elementus. Tagad izveidosim XML dokumentu lidojumā. Pirmkārt, atcerieties, ka dokumentu var ielādēt ne tikai no URL, bet arī no parastās virknes. Tālāk ir parādīts, kā izveidot saknes elementu, ko pēc tam var izmantot, lai dinamiski izveidotu pārējos elementus (par ko mēs jau runājām sadaļā Manipulating Child Branches):</p><p>Var XMLDoc: IXMLDOMDocument; Sakne: IXMLDOMNode; Mezgls: IXMLDOMNode; S: WideString; ...S:=' <CATALOG></CATALOG>'; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.LoadXML(S); Root:= XMLDoc.DocumentElement; Node:= XMLDoc.CreateNode(1, 'CD', ''); Root.AppendChild(Node); Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nulle;</p><p>Pēc XML dokumenta izveidošanas mēs to saglabājam failā, izmantojot Saglabāšanas metodi. Piemēram:</p> <p>XMLDoc.Save('C:\DATA\NEWCD.XML');</p> <p>Papildus saglabāšanai failā, saglabāšanas metode ļauj saglabāt XML dokumentu jaunā XMLDOMDocument objektā. Šajā gadījumā dokuments tiek pilnībā apstrādāts, un rezultātā tiek pārbaudīta tā struktūra un sintakse. Tālāk ir parādīts, kā saglabāt dokumentu citā objektā:</p><p>Procedūra TForm1.Button2Click(Sūtītājs: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2:= CoDOMDocument.Create; XMLDoc.Save(XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Nulle; beigas;</p><p>Visbeidzot, saglabāšanas metode ļauj arī saglabāt XML dokumentu citos COM objektos, kas atbalsta IStream, IPersistStream vai IPersistStreamInit saskarnes.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Izmantojot XSL veidnes</h2> <p>Apspriežot XMLDOMNode objekta SelectNodes metodi, mēs minējām, ka tā nodrošina elastīgāku veidu, kā piekļūt dokumentu zariem. Elastība ir tāda, ka varat norādīt XSL veidni kā zaru atlases kritēriju. Šādas veidnes nodrošina jaudīgu mehānismu informācijas atrašanai XML dokumentos. Piemēram, lai iegūtu visu mūsu katalogā esošo mūzikas CD-ROM nosaukumu sarakstu, mēs varētu izpildīt šādu vaicājumu:</p><p>Lai noskaidrotu, kuri mākslinieku kompaktdiski tika izdoti ASV, vaicājums tiek veidots šādi:</p><p>Nodes:= Root.SelectNodes('CD/IZPILDĪTĀJS');</p><p>Tālāk ir parādīts, kā direktorijā atrast pirmo disku:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Un pēdējais:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Lai atrastu Boba Dilana diskus, varat izpildīt šādu vaicājumu:</p><p>Nodes:= Root.SelectNodes('CD[$any$ ARTIST="Bob Dilans"]/TITLE');</p><p>un, lai iegūtu pēc 1985. gada izdoto disku sarakstu, mēs izpildām šādu vaicājumu:</p><p>Nodes:= Root.SelectNodes('CD/TITLE');</p><p>Detalizētākai diskusijai par XSL sintakse ir nepieciešama atsevišķa ziņa. Lai ieintriģētu lasītājus un veicinātu turpmāku izpēti, es minēšu tikai vienu nelielu piemēru iespējamai XSL izmantošanai. Pieņemsim, ka mums ir jāpārvērš mūsu direktorijs par parastu HTML tabulu. Izmantojot tradicionālās metodes, mums jāiet cauri visiem koka zariem un katram saņemtajam elementam jāveido atbilstošās atzīmes. <TD>…</TD>.</p> <p>Izmantojot XSL, mēs vienkārši izveidojam veidni (vai stila lapu), kurā norādām, ko un kā pārveidot. Pēc tam mēs ievietojam šo veidni mūsu katalogā — un esat pabeidzis: mums ir XSL veidnes teksts, kas pārvērš katalogu par tabulu (2. saraksts).</p> <p>Kods XSL veidnes pārklājumam mūsu direktorijā izskatās šādi:</p><p>Procedūra TForm1.Button2Click(Sūtītājs: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc:= CoDOMDocument.Create; XSLDoc.Load('C:\DATI\DATI.xsl'); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Nulle; beigas;</p><p>Noslēdzot mūsu diskusiju par XSL, jāsaka, ka šobrīd šī valoda tiek aktīvi izmantota transformācijai starp dažādiem XML dokumentiem, kā arī dokumentu formatēšanai.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Secinājums</h2> <p>Acīmredzamu iemeslu dēļ nav iespējams vienā rakstā aptvert visus Microsoft XML DOM objektus un sniegt to izmantošanas piemērus. Šeit mēs esam pieskārušies tikai galvenajiem jautājumiem par XML DOM izmantošanu lietojumprogrammās. Tabulā. 3. attēlā parādīti visi objekti, kas ieviesti Microsoft XML DOM.</p> <p>ComputerPress 12"2000</p> <p>Sveicu visus! Vairākus gadus es rakstīju Matlab, un tad man bija nepacietība rakstīt programmu Delfos.</p><p>Man jāiemācās strādāt ar xml dokumentiem. Es strādāju RAD Stiduo XE3. Ir TXMLDocument komponents, ko droši vien zina daudzi Delphi programmētāji. Šķiet, ka viņš var daudz. Bet problēma ir tā, ka tam nav skaidras dokumentācijas un apraksta. Palīdzība RAD Studio ir miskaste, jo tur nav normālas informācijas; tikai niecīga palīdzība, kas izkaisīta pa lapām par dažām metodēm un procedūrām (bez piemēriem un parasta apraksta). Izrakstīja visu internetu. Atradu tikai tēmas forumos ar konkrētiem uzdevumiem, kur vēl stundu jāmin, ko dara tā vai cita rinda, kas saistīta ar piekļūšanu xml failam. <br>Man ir nepieciešama arī rokasgrāmata par galvenajām funkcijām, procedūrām un metodēm, kas tiek izmantotas, strādājot ar xml. Mācību grāmata, rokasgrāmata, apraksts. Vai vismaz "xml delfos manekeniem". Piemēram:</p><p><i>Lai atvērtu xml failu, izmantojiet metodi XMLDocument1.LoadFromFile("filemane.xml"), kur faila nosaukums ir faila nosaukums. <br>IXMLNode tipa mezglu saraksta mainīgais tiek izmantots, lai saglabātu pakārtoto elementu sarakstu. Lai noteiktu šo sarakstu, izmantojiet metodi Xmldocument1.DocumentElement (kur XMLDocument1 ir pārbaudāmais xml fails). <br>Lai vaicātu bērna elementa "element1" saturu, izmantojiet metodi XMLDocument1.DocumentElement.ChildNodes[ "element1"].Text.... <br></i><br>un šajā garā tālāk par visām izmantotajām metodēm, procedūrām, datu veidiem. <br>Kur es varu atrast šādas rokasgrāmatas/aprakstus? Kurš var palīdzēt?</p><p>Ja nepieciešams konkrēts uzdevums, aprakstīšu. <br>Man ir šāds xml dokuments:</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>panoro_u.jpg</tiles><br> <tiles>panoro_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">kāds teksts</data><br><data name="onerror" mode="noVoice">kāds kļūdas teksts</data><br><data name="onerror" mode="alarm">Cits kļūdas teksts</data></p><p>Programmas kodā mums ir:</p><p>var <br>...<br>vecāks, bērns1: IXMLNode;</p><p>sākt <br>XMLDocument1.LoadFromFile("f:\filename.xml"); <br>XMLDocument1.Active:=true; <br>.<br>.<br>beigas</p><p>Kas jums jāiemācās darīt: <br>(Jau iepriekš atvainojos, ja nepareizi nosaucu xml dokumenta komponentus) <br>1. Iegūstiet saknes elementa nosaukumu (mūsu gadījumā ltm), kā arī tā atribūtu sarakstu (versiju, veidu) un to vērtības ("1.0", "iestatījumi"). <br>2. Iegūstiet elementu skaitu, kas ir saknes bērni. Šajā gadījumā ir 7 no tiem: veidneFaili, izmēri, tīklājs, tīklājs, dati, dati, dati. Iegūstiet elementu (tagu) nosaukumus (veidnes faili, izmēri utt.). Pēc elementu skaita iegūšanas un to nosaukumu iegūšanas es cilpu no 0 uz count-1 un darīšu to, kas man vajadzīgs. <br>3. Iegūstiet vajadzīgā elementa atribūtu skaitu un sarakstu. Piemēram, karstā punkta elementam. Pareizā atbilde būtu 4 atribūti. Pirmajam tīklāja elementam tie būs nosaukums, stils, scena, ath. Otrajam - tas pats, tikai ath atribūta vietā - rz atribūts. <br>Ņemiet vērā, ka failā ir 2 tīklāja elementi ar dažādiem atribūtiem. Lūk, kā ar tiem strādāt (ja ir vairāk nekā 1 viena nosaukuma elementi)? <br>Es tā vēlos: es saņemu bērnu elementu sarakstu uz rel. uz saknes vienu (skat. 2. punktu), izlaižu tiem cilpu ar for un atrodu hotspot elementus, kuru nosaukuma parametrs ir vienāds ar vajadzīgo (saki "hs015_2" - tāds elements noteikti būs). Vai ir kāds veids, kā atrisināt šo problēmu bez cilpas? Tas nozīmē, vai iegūt atribūta scena vērtību tīklāja elementam, kuram ir name="hs015_2"? <br>4. Veiciet iepriekš minēto attiecībā uz mezgliem un elementiem, kas ir bērnu bērni. Manā piemērā mezgls (bērns un vecāks un. <br>Ja pareizi saprotu, vajag kaut kā pārsūtīt mezgla saturu uz <a href="https://obanracer.ru/lv/tipy-peremennyh-visual-basic-yazyk-programmirovaniya-visual-basic-tipy-dannyh.html">tipa mainīgais</a> IXMLNode un rīkojieties tāpat kā 1.–3. Tātad?</p><p>5. Jums jāiemācās mainīt augstāk minētos parametrus (iestatiet savus).</p><p>Šķiet, ka pagaidām tas arī viss. Šajā posmā sintaktiskās konstrukcijas man ir vissvarīgākās. <br>Kam pieder šī tēma, lūdzu uzrakstiet citas sintaktiskās konstrukcijas, lai atrisinātu augstāk minētos jautājumus (kā iegūt atribūtus, to skaitu, elementu skaitu, nosaukumus utt.). Tagad galvenais ir apgūt sintaksi, un es vēlāk ieviesīšu savu algoritmu. Jau iepriekš liels paldies visiem!</p><p>P.S. Es tiešām negribētu rakstīt savu XML parseri no nulles tikai tāpēc, ka nav normāla apraksta esošajiem.</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>Iepriekšējais raksts</span><a href="https://obanracer.ru/lv/programma-dlya-ustranenie-nepoladok-windows-7-problemy-so-zvukom.html">Problēmu novēršanas rīks operētājsistēmai Windows 7</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>Nākamais raksts</span><a href="https://obanracer.ru/lv/kak-umenshit-masshtab-papok-na-rabochem-stole-uvelichenie-ili.html">Palieliniet vai samaziniet darbvirsmas īsceļu lielumu</a></div> <!-- /next_post --> </div> </div> <div class="td-author-name vcard author" style="display: none"><span class="fn"><a href="https://obanracer.ru/lv/author/iulia">Jūlija</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="#">SAISTĪTIE RAKSTI</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/lv/win-10-vklyuchit-zashchitu-sistemy-komandnaya-stroka.html" rel="bookmark" title="Win 10 iespējo sistēmas aizsardzības komandrindu"><img width="218" height="150" class="entry-thumb" src="/uploads/d1c7f90d00937e7d108a7fc7e23fa985.jpg" alt="Win 10 iespējo sistēmas aizsardzības komandrindu" title="Win 10 iespējo sistēmas aizsardzības komandrindu"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/case/" class="td-post-category">korpuss</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/win-10-vklyuchit-zashchitu-sistemy-komandnaya-stroka.html" rel="bookmark" title="Win 10 iespējo sistēmas aizsardzības komandrindu">Win 10 iespējo sistēmas aizsardzības komandrindu</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/lv/ustranit-vse-oshibki-v-windows-7-ispravlenie-sistemnogo-reestra-chto.html" rel="bookmark" title="Sistēmas reģistra labošana"><img width="218" height="150" class="entry-thumb" src="/uploads/7f394ca5a2a7e75880d26950086533b3.jpg" alt="Sistēmas reģistra labošana" title="Sistēmas reģistra labošana"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/the-winchesters/" class="td-post-category">Vinčestera</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/ustranit-vse-oshibki-v-windows-7-ispravlenie-sistemnogo-reestra-chto.html" rel="bookmark" title="Sistēmas reģistra labošana">Sistēmas reģistra labošana</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/lv/plohoi-zvuk-na-noutbuke-drebezzhit-chto-delat-chto-delat-esli-zvuk.html" rel="bookmark" title="Ko darīt, ja klēpjdatorā atskan sēkšana"><img width="218" height="150" class="entry-thumb" src="/uploads/7af8109a8426b6298663e6bf120cc09a.jpg" alt="Ko darīt, ja klēpjdatorā atskan sēkšana" title="Ko darīt, ja klēpjdatorā atskan sēkšana"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/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/lv/plohoi-zvuk-na-noutbuke-drebezzhit-chto-delat-chto-delat-esli-zvuk.html" rel="bookmark" title="Ko darīt, ja klēpjdatorā atskan sēkšana">Ko darīt, ja klēpjdatorā atskan sēkšana</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/lv/uvelichilis-ikonki-na-rabochem-stole-chto-delat-uvelichenie-ili.html" rel="bookmark" title="Palieliniet vai samaziniet darbvirsmas īsceļu lielumu"><img width="218" height="150" class="entry-thumb" src="/uploads/088fbc93d54c403bb06c1fec36e46fb8.jpg" alt="Palieliniet vai samaziniet darbvirsmas īsceļu lielumu" title="Palieliniet vai samaziniet darbvirsmas īsceļu lielumu"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/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/lv/uvelichilis-ikonki-na-rabochem-stole-chto-delat-uvelichenie-ili.html" rel="bookmark" title="Palieliniet vai samaziniet darbvirsmas īsceļu lielumu">Palieliniet vai samaziniet darbvirsmas īsceļu lielumu</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/lv/chto-delat-esli-zvuk-hripit-na-noutbuke-skype-hripit-zvuk-treshchit.html" rel="bookmark" title="Skype sēkšanas skaņa — klēpjdatora sēkšana, sēkšana, sēkšana"><img width="218" height="150" class="entry-thumb" src="/uploads/2e8217ef9b2112a4b7b64bb10f7d0d84.jpg" alt="Skype sēkšanas skaņa — klēpjdatora sēkšana, sēkšana, sēkšana" title="Skype sēkšanas skaņa — klēpjdatora sēkšana, sēkšana, sēkšana"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/motherboard/" class="td-post-category">mātesplatēm</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/chto-delat-esli-zvuk-hripit-na-noutbuke-skype-hripit-zvuk-treshchit.html" rel="bookmark" title="Skype sēkšanas skaņa — klēpjdatora sēkšana, sēkšana, sēkšana">Skype sēkšanas skaņa — klēpjdatora sēkšana, sēkšana, sēkšana</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/lv/sdelat-aktivaciyu-vindovs-10-aktivaciya-windows-posle-zameny-materinskoi-platy.html" rel="bookmark" title="Windows aktivizēšana pēc mātesplates nomaiņas"><img width="218" height="150" class="entry-thumb" src="/uploads/4ded1ffd9c6a5430912a5920b6a1c039.jpg" alt="Windows aktivizēšana pēc mātesplates nomaiņas" title="Windows aktivizēšana pēc mātesplates nomaiņas"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/motherboard/" class="td-post-category">mātesplatēm</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/sdelat-aktivaciyu-vindovs-10-aktivaciya-windows-posle-zameny-materinskoi-platy.html" rel="bookmark" title="Windows aktivizēšana pēc mātesplates nomaiņas">Windows aktivizēšana pēc mātesplates nomaiņas</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/lv/windows-ne-vidit-zhestkii-disk-kak-vosstanovit-vidimost-zhestkogo.html" rel="bookmark" title="Kā atjaunot cietā diska redzamību sistēmā Windows"><img width="218" height="150" class="entry-thumb" src="/uploads/55be497e3b8703b23db7f3eb8e7ced75.jpg" alt="Kā atjaunot cietā diska redzamību sistēmā Windows" title="Kā atjaunot cietā diska redzamību sistēmā Windows"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/multimedia/" class="td-post-category">Multivide</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/windows-ne-vidit-zhestkii-disk-kak-vosstanovit-vidimost-zhestkogo.html" rel="bookmark" title="Kā atjaunot cietā diska redzamību sistēmā Windows">Kā atjaunot cietā diska redzamību sistēmā Windows</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/lv/bystro-razryazhaetsya-batareya-na-androide-flai-bystro.html" rel="bookmark" title="Viedtālruņa akumulators ātri izlādējas: cēloņi un veidi, kā labot akumulatora veiktspēju"><img width="218" height="150" class="entry-thumb" src="/uploads/48d3f8eaaca5f3f2eae886830bf37335.jpg" alt="Viedtālruņa akumulators ātri izlādējas: cēloņi un veidi, kā labot akumulatora veiktspēju" title="Viedtālruņa akumulators ātri izlādējas: cēloņi un veidi, kā labot akumulatora veiktspēju"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/more/" class="td-post-category">Cits</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/bystro-razryazhaetsya-batareya-na-androide-flai-bystro.html" rel="bookmark" title="Viedtālruņa akumulators ātri izlādējas: cēloņi un veidi, kā labot akumulatora veiktspēju">Viedtālruņa akumulators ātri izlādējas: cēloņi un veidi, kā labot akumulatora veiktspēju</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/lv/beskonechnaya-podgotovka-avtomaticheskogo-vosstanovleniya-windows-10.html" rel="bookmark" title="Problēmu novēršana "Dators netika pareizi startēts""><img width="218" height="150" class="entry-thumb" src="/uploads/0fade8d7e25af7e4ea4fe5569fc8880f.jpg" alt="Problēmu novēršana "Dators netika pareizi startēts"" title="Problēmu novēršana "Dators netika pareizi startēts""/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/power-supply/" class="td-post-category">Barošanas avoti</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/beskonechnaya-podgotovka-avtomaticheskogo-vosstanovleniya-windows-10.html" rel="bookmark" title="Problēmu novēršana "Dators netika pareizi startēts"">Problēmu novēršana "Dators netika pareizi startēts"</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">Ieteicams</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/lv/kak-otklyuchit-obnovlenie-po-vai-fai-zachem-otklyuchat-obnovleniya-no-kak-otklyuchit.html" rel="bookmark" title="Kāpēc atspējot atjauninājumus"><img width="324" height="235" class="entry-thumb" src="/uploads/704dc97d1384782c30e7adfbdf64e08c.jpg" alt="Kāpēc atspējot atjauninājumus" title="Kāpēc atspējot atjauninājumus"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/lv/category/windows-7/" class="td-post-category">Windows 7</a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/kak-otklyuchit-obnovlenie-po-vai-fai-zachem-otklyuchat-obnovleniya-no-kak-otklyuchit.html" rel="bookmark" title="Kāpēc atspējot atjauninājumus">Kāpēc atspējot atjauninājumus</a></h3> <div class="td-module-meta-info"> </div> <div class="td-excerpt">Ieteicams visu lietotni atjaunināt uz jaunāko versiju, jo izstrādātāji pastāvīgi uzlabo un labo savas lietotnes. Bet,...</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/lv/skachat-programmu-print-poleznye-programmy-dlya-udobnoi-pechati-shtamp.html" rel="bookmark" title="Noderīgas programmas ērtai drukāšanai"><img width="100" height="70" class="entry-thumb" src="/uploads/3855d75c325df85e1a7c9042192d6eb0.jpg" alt="Noderīgas programmas ērtai drukāšanai" title="Noderīgas programmas ērtai drukāšanai"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/skachat-programmu-print-poleznye-programmy-dlya-udobnoi-pechati-shtamp.html" rel="bookmark" title="Noderīgas programmas ērtai drukāšanai">Noderīgas programmas ērtai drukāšanai</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/category/internet/" class="td-post-category">Internets</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/lv/besplatnyi-pdf-redaktor-dlya-zagruzki-besplatnyi-pdf-redaktor-dlya.html" rel="bookmark" title="Bezmaksas PDF redaktors lejupielādei Kā izmantot PDF24 Creator kā PDF redaktoru"><img width="100" height="70" class="entry-thumb" src="/uploads/98ed4a74f50db43ea9e8a30120101b60.jpg" alt="Bezmaksas PDF redaktors lejupielādei Kā izmantot PDF24 Creator kā PDF redaktoru" title="Bezmaksas PDF redaktors lejupielādei Kā izmantot PDF24 Creator kā PDF redaktoru"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/besplatnyi-pdf-redaktor-dlya-zagruzki-besplatnyi-pdf-redaktor-dlya.html" rel="bookmark" title="Bezmaksas PDF redaktors lejupielādei Kā izmantot PDF24 Creator kā PDF redaktoru">Bezmaksas PDF redaktors lejupielādei Kā izmantot PDF24 Creator kā PDF redaktoru</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/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/lv/skachat-programmu-dlya-skachivaniya-vindovs-na-fleshku-luchshie-programmy-dlya.html" rel="bookmark" title="Labākās programmas, lai izveidotu sāknējamu USB zibatmiņu"><img width="100" height="70" class="entry-thumb" src="/uploads/ed7c9f083e348497df654a953256ef50.jpg" alt="Labākās programmas, lai izveidotu sāknējamu USB zibatmiņu" title="Labākās programmas, lai izveidotu sāknējamu USB zibatmiņu"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/skachat-programmu-dlya-skachivaniya-vindovs-na-fleshku-luchshie-programmy-dlya.html" rel="bookmark" title="Labākās programmas, lai izveidotu sāknējamu USB zibatmiņu">Labākās programmas, lai izveidotu sāknējamu USB zibatmiņu</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/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/lv/programma-po-raschetu-kommunalnyh-platezhei-programma-dlya-zhkh.html" rel="bookmark" title="Programma komunālo pakalpojumu rēķinu aprēķināšanai"><img width="100" height="70" class="entry-thumb" src="/uploads/265d4c89ec3304e39560810424f028be.jpg" alt="Programma komunālo pakalpojumu rēķinu aprēķināšanai" title="Programma komunālo pakalpojumu rēķinu aprēķināšanai"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/programma-po-raschetu-kommunalnyh-platezhei-programma-dlya-zhkh.html" rel="bookmark" title="Programma komunālo pakalpojumu rēķinu aprēķināšanai">Programma komunālo pakalpojumu rēķinu aprēķināšanai</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/category/windows-7/" class="td-post-category">Windows 7</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/lv/avant-browser-skachat-besplatno-russkaya-versiya-avant-browser-skachat-besplatno.html" rel="bookmark" title="Avant Browser bezmaksas lejupielāde krievu valodas versijas Avant Browser galvenās iezīmes"><img width="100" height="70" class="entry-thumb" src="/uploads/ca04cf7a8c0e4efae1530eea00c206cd.jpg" alt="Avant Browser bezmaksas lejupielāde krievu valodas versijas Avant Browser galvenās iezīmes" title="Avant Browser bezmaksas lejupielāde krievu valodas versijas Avant Browser galvenās iezīmes"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/avant-browser-skachat-besplatno-russkaya-versiya-avant-browser-skachat-besplatno.html" rel="bookmark" title="Avant Browser bezmaksas lejupielāde krievu valodas versijas Avant Browser galvenās iezīmes">Avant Browser bezmaksas lejupielāde krievu valodas versijas Avant Browser galvenās iezīmes</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/category/more/" class="td-post-category">Cits</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/lv/kak-otklyuchit-v-avtozagruzke-nenuzhnye-programmy-kak.html" rel="bookmark" title="Kā atspējot Windows programmu automātisko ielādi?"><img width="100" height="70" class="entry-thumb" src="/uploads/a9b2639329d4ef547d04ad9d1c75059e.jpg" alt="Kā atspējot Windows programmu automātisko ielādi?" title="Kā atspējot Windows programmu automātisko ielādi?"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/lv/kak-otklyuchit-v-avtozagruzke-nenuzhnye-programmy-kak.html" rel="bookmark" title="Kā atspējot Windows programmu automātisko ielādi?">Kā atspējot Windows programmu automātisko ielādi?</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/lv/category/graphics-card/" class="td-post-category">Video kartes</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/lv/skachat-programmu-dlya-usileniya-mikrofona-na-noutbuke-kak-podklyuchit-mikrofon-k.html" rel="bookmark" title="Kā savienot mikrofonu ar datoru vai klēpjdatoru - programmas un iestatījumi tiešsaistē"><img width="218" height="150" class="entry-thumb" src="/uploads/df6c8b36bfe39111a043092cfd86ce5f.jpg" alt="Kā savienot mikrofonu ar datoru vai klēpjdatoru - programmas un iestatījumi tiešsaistē" title="Kā savienot mikrofonu ar datoru vai klēpjdatoru - programmas un iestatījumi tiešsaistē"/ 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/lv/skachat-programmu-dlya-usileniya-mikrofona-na-noutbuke-kak-podklyuchit-mikrofon-k.html" rel="bookmark" title="Kā savienot mikrofonu ar datoru vai klēpjdatoru - programmas un iestatījumi tiešsaistē">Kā savienot mikrofonu ar datoru vai klēpjdatoru - programmas un iestatījumi tiešsaistē</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/lv/kakoi-ofis-luchshe-dlya-mak-ofisnye-programmy-dlya-mac-os-podderzhivaemaya.html" rel="bookmark" title="Biroja programmas operētājsistēmai Mac OS"><img width="218" height="150" class="entry-thumb" src="/uploads/f97cce4ad006e452bd7f2e2c05e9497d.jpg" alt="Biroja programmas operētājsistēmai Mac OS" title="Biroja programmas operētājsistēmai Mac OS"/ 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/lv/kakoi-ofis-luchshe-dlya-mak-ofisnye-programmy-dlya-mac-os-podderzhivaemaya.html" rel="bookmark" title="Biroja programmas operētājsistēmai Mac OS">Biroja programmas operētājsistēmai Mac OS</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/lv/dorozhnyi-redaktor-sxemka-com-sostavlenie-shemy-dtp-onlain-redaktirovanie-grafa-dorog.html" rel="bookmark" title="Negadījuma shēmas sastādīšana tiešsaistē"><img width="218" height="150" class="entry-thumb" src="/uploads/df40e8598b93720ac085e823cd229f4f.jpg" alt="Negadījuma shēmas sastādīšana tiešsaistē" title="Negadījuma shēmas sastādīšana tiešsaistē"/ 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/lv/dorozhnyi-redaktor-sxemka-com-sostavlenie-shemy-dtp-onlain-redaktirovanie-grafa-dorog.html" rel="bookmark" title="Negadījuma shēmas sastādīšana tiešsaistē">Negadījuma shēmas sastādīšana tiešsaistē</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/lv/skachat-programmu-cometa-udobnyi-kometa-brauzer-kak-skachat-i.html" rel="bookmark" title="Ērts Comet pārlūks, kā lejupielādēt un instalēt"><img width="218" height="150" class="entry-thumb" src="/uploads/5d270737ca481ade2f7cc05dc73c28c2.jpg" alt="Ērts Comet pārlūks, kā lejupielādēt un instalēt" title="Ērts Comet pārlūks, kā lejupielādēt un instalēt"/ 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/lv/skachat-programmu-cometa-udobnyi-kometa-brauzer-kak-skachat-i.html" rel="bookmark" title="Ērts Comet pārlūks, kā lejupielādēt un instalēt">Ērts Comet pārlūks, kā lejupielādēt un instalēt</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/lv/yandeks-brauzer-poluchil-rezhim-ekonomii-pamyati-kak-pochistit-kesh.html" rel="bookmark" title="Pārlūkprogramma ieguva atmiņas taupīšanas režīmu"><img width="218" height="150" class="entry-thumb" src="/uploads/bea23409cf2480d21ceb061279d03372.jpg" alt="Pārlūkprogramma ieguva atmiņas taupīšanas režīmu" title="Pārlūkprogramma ieguva atmiņas taupīšanas režīmu"/ 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/lv/yandeks-brauzer-poluchil-rezhim-ekonomii-pamyati-kak-pochistit-kesh.html" rel="bookmark" title="Pārlūkprogramma ieguva atmiņas taupīšanas režīmu">Pārlūkprogramma ieguva atmiņas taupīšanas režīmu</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/lv/oshibka-podklyucheniya-ssl-na-android-kak-ispravit-oshibka-ssl-v-opera-sposoby.html" rel="bookmark" title="SSL kļūda operētājsistēmā Opera: kā to labot"><img width="218" height="150" class="entry-thumb" src="/uploads/f1b6708f807f7c225d41a7997000907a.jpg" alt="SSL kļūda operētājsistēmā Opera: kā to labot" title="SSL kļūda operētājsistēmā Opera: kā to labot"/ 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/lv/oshibka-podklyucheniya-ssl-na-android-kak-ispravit-oshibka-ssl-v-opera-sposoby.html" rel="bookmark" title="SSL kļūda operētājsistēmā Opera: kā to labot">SSL kļūda operētājsistēmā Opera: kā to labot</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/lv/plagin-kriptopro-ecp-browser-dlya-raboty-s-elektronnoi-podpisyu-v-brauzere-internet.html" rel="bookmark" title="Lai strādātu ar elektronisko parakstu pārlūkprogrammā Internet Explorer, jums būs nepieciešams CryptoPro CADESCOM spraudnis"><img width="218" height="150" class="entry-thumb" src="/uploads/38ddfca22ae34897623e54131738d6b6.jpg" alt="Lai strādātu ar elektronisko parakstu pārlūkprogrammā Internet Explorer, jums būs nepieciešams CryptoPro CADESCOM spraudnis" title="Lai strādātu ar elektronisko parakstu pārlūkprogrammā Internet Explorer, jums būs nepieciešams CryptoPro CADESCOM spraudnis"/ 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/lv/plagin-kriptopro-ecp-browser-dlya-raboty-s-elektronnoi-podpisyu-v-brauzere-internet.html" rel="bookmark" title="Lai strādātu ar elektronisko parakstu pārlūkprogrammā Internet Explorer, jums būs nepieciešams CryptoPro CADESCOM spraudnis">Lai strādātu ar elektronisko parakstu pārlūkprogrammā Internet Explorer, jums būs nepieciešams CryptoPro CADESCOM spraudnis</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/lv/kak-skopirovat-klyuchi-s-diskety-ili-fleshki-v-reestr-kopirovanie-s-pomoshchyu.html" rel="bookmark" title="Kopēšana ar CryptoPro CSP Kā pievienot atslēgas konteineru kriptopro"><img width="218" height="150" class="entry-thumb" src="/uploads/4e8c241f58a377b485e1c4d42b176664.jpg" alt="Kopēšana ar CryptoPro CSP Kā pievienot atslēgas konteineru kriptopro" title="Kopēšana ar CryptoPro CSP Kā pievienot atslēgas konteineru kriptopro"/ 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/lv/kak-skopirovat-klyuchi-s-diskety-ili-fleshki-v-reestr-kopirovanie-s-pomoshchyu.html" rel="bookmark" title="Kopēšana ar CryptoPro CSP Kā pievienot atslēgas konteineru kriptopro">Kopēšana ar CryptoPro CSP Kā pievienot atslēgas konteineru kriptopro</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/lv/proizoshla-oshibka-ssl-bezopasnoe-podklyuchenie-k-serveru-ispravlenie-oshibki.html" rel="bookmark" title="Labojiet SSL savienojuma kļūdu"><img width="218" height="150" class="entry-thumb" src="/uploads/8650aa2db2269130814844e957415faf.jpg" alt="Labojiet SSL savienojuma kļūdu" title="Labojiet SSL savienojuma kļūdu"/ 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/lv/proizoshla-oshibka-ssl-bezopasnoe-podklyuchenie-k-serveru-ispravlenie-oshibki.html" rel="bookmark" title="Labojiet SSL savienojuma kļūdu">Labojiet SSL savienojuma kļūdu</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/lv/alfa-direkt-torgovaya-platforma-ot-gruppy-alfa-lichnyi-kabinet.html" rel="bookmark" title="Alfa-Direct personīgais konts Izmantojot Direct terminālu, lai iegādātos ārvalstu valūtu"><img width="218" height="150" class="entry-thumb" src="/uploads/b4f461b2e552784793497bea211b7f58.jpg" alt="Alfa-Direct personīgais konts Izmantojot Direct terminālu, lai iegādātos ārvalstu valūtu" title="Alfa-Direct personīgais konts Izmantojot Direct terminālu, lai iegādātos ārvalstu valūtu"/ 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/lv/alfa-direkt-torgovaya-platforma-ot-gruppy-alfa-lichnyi-kabinet.html" rel="bookmark" title="Alfa-Direct personīgais konts Izmantojot Direct terminālu, lai iegādātos ārvalstu valūtu">Alfa-Direct personīgais konts Izmantojot Direct terminālu, lai iegādātos ārvalstu valūtu</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/lv/arhivnoe-hranenie-elektronnyh-dokumentov-problemy-i-resheniya.html" rel="bookmark" title="Krātuves ierīces Multivides uzglabāšanas prasības"><img width="218" height="150" class="entry-thumb" src="/uploads/a55aa39f11d45b25434399ad3a63b401.jpg" alt="Krātuves ierīces Multivides uzglabāšanas prasības" title="Krātuves ierīces Multivides uzglabāšanas prasības"/ 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/lv/arhivnoe-hranenie-elektronnyh-dokumentov-problemy-i-resheniya.html" rel="bookmark" title="Krātuves ierīces Multivides uzglabāšanas prasības">Krātuves ierīces Multivides uzglabāšanas prasības</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/lv/obzor-zakonodatelstva-rossiiskoi-federacii-kriptografiya-skzi--.html" rel="bookmark" title="Pārskats par Krievijas Federācijas tiesību aktiem: Kriptogrāfija"><img width="218" height="150" class="entry-thumb" src="/uploads/2db92428449a03c9e001b3262a282b68.jpg" alt="Pārskats par Krievijas Federācijas tiesību aktiem: Kriptogrāfija" title="Pārskats par Krievijas Federācijas tiesību aktiem: Kriptogrāfija"/ 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/lv/obzor-zakonodatelstva-rossiiskoi-federacii-kriptografiya-skzi--.html" rel="bookmark" title="Pārskats par Krievijas Federācijas tiesību aktiem: Kriptogrāfija">Pārskats par Krievijas Federācijas tiesību aktiem: Kriptogrāfija</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/lv/ekstern-kak-vvesti-seriinyi-nomer-kriptopro-kontur-ekstern-gde-vzyat.html" rel="bookmark" title="Kā ievadīt CryptoPro sērijas numuru - Kontur"><img width="218" height="150" class="entry-thumb" src="/uploads/40d48251a5024abbed0e4b73db793fdeub-218x150.png" alt="Kā ievadīt CryptoPro sērijas numuru - Kontur" title="Kā ievadīt CryptoPro sērijas numuru - Kontur"/ 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/lv/ekstern-kak-vvesti-seriinyi-nomer-kriptopro-kontur-ekstern-gde-vzyat.html" rel="bookmark" title="Kā ievadīt CryptoPro sērijas numuru - Kontur">Kā ievadīt CryptoPro sērijas numuru - Kontur</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/lv/naznachenie-kriptopro-csp-naznachenie-kriptopro-csp-gde-skachat.html" rel="bookmark" title="CryptoPro CSP mērķis Kur lejupielādēt CryptoPro 3"><img width="218" height="150" class="entry-thumb" src="/uploads/0d00316b27f67752e2a618887bd9aca5.jpg" alt="CryptoPro CSP mērķis Kur lejupielādēt CryptoPro 3" title="CryptoPro CSP mērķis Kur lejupielādēt CryptoPro 3"/ 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/lv/naznachenie-kriptopro-csp-naznachenie-kriptopro-csp-gde-skachat.html" rel="bookmark" title="CryptoPro CSP mērķis Kur lejupielādēt CryptoPro 3">CryptoPro CSP mērķis Kur lejupielādēt CryptoPro 3</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/lv/kopirovanie-s-pomoshchyu-kriptopro-csp-kak-skopirovat-elektronnuyu-podpis-iz.html" rel="bookmark" title="Kā nokopēt elektronisko parakstu no reģistra uz datu nesēju?"><img width="218" height="150" class="entry-thumb" src="/uploads/854fab2262d704be53cc68461da6fc74.jpg" alt="Kā nokopēt elektronisko parakstu no reģistra uz datu nesēju?" title="Kā nokopēt elektronisko parakstu no reģistra uz datu nesēju?"/ 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/lv/kopirovanie-s-pomoshchyu-kriptopro-csp-kak-skopirovat-elektronnuyu-podpis-iz.html" rel="bookmark" title="Kā nokopēt elektronisko parakstu no reģistra uz datu nesēju?">Kā nokopēt elektronisko parakstu no reģistra uz datu nesēju?</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/lv/jakarta-sessiya-s-ustroistvom-ne-otkryta-rabota-nad-oshibkami-ili-kakie-u.html" rel="bookmark" title="Darbs ar kļūdām jeb kādas ir Džakartas atsauksmes"><img width="218" height="150" class="entry-thumb" src="/uploads/239bf39453add0b31807a91edc3b4cea.jpg" alt="Darbs ar kļūdām jeb kādas ir Džakartas atsauksmes" title="Darbs ar kļūdām jeb kādas ir Džakartas atsauksmes"/ 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/lv/jakarta-sessiya-s-ustroistvom-ne-otkryta-rabota-nad-oshibkami-ili-kakie-u.html" rel="bookmark" title="Darbs ar kļūdām jeb kādas ir Džakartas atsauksmes">Darbs ar kļūdām jeb kādas ir Džakartas atsauksmes</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/lv/etoken-zablokirovan-parol-administratora-ne-zadan-pin-kod-dlya-tokenov-parol.html" rel="bookmark" title="PIN kods žetoniem: parole ar īpašiem noteikumiem"><img width="218" height="150" class="entry-thumb" src="/uploads/8c94c932648fb8da30e4e11620a0803d.jpg" alt="PIN kods žetoniem: parole ar īpašiem noteikumiem" title="PIN kods žetoniem: parole ar īpašiem noteikumiem"/ 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/lv/etoken-zablokirovan-parol-administratora-ne-zadan-pin-kod-dlya-tokenov-parol.html" rel="bookmark" title="PIN kods žetoniem: parole ar īpašiem noteikumiem">PIN kods žetoniem: parole ar īpašiem noteikumiem</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/lv/kak-legko-sozdat-svoyu-temu-dlya-google-chrome-interesnye-fakty-i.html" rel="bookmark" title="Interesanti fakti un noderīgi padomi Kā izveidot motīvu pārlūkam Google Chrome"><img width="218" height="150" class="entry-thumb" src="/uploads/e9fc8c546a7be9cbf4bd29018fd7040d.jpg" alt="Interesanti fakti un noderīgi padomi Kā izveidot motīvu pārlūkam Google Chrome" title="Interesanti fakti un noderīgi padomi Kā izveidot motīvu pārlūkam Google Chrome"/ 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/lv/kak-legko-sozdat-svoyu-temu-dlya-google-chrome-interesnye-fakty-i.html" rel="bookmark" title="Interesanti fakti un noderīgi padomi Kā izveidot motīvu pārlūkam Google Chrome">Interesanti fakti un noderīgi padomi Kā izveidot motīvu pārlūkam Google Chrome</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">Autortiesības 2022 — datoru un klēpjdatoru remonts. Videokartes, cietie diski, internets, 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>