Hogyan dolgozhatok XML dokumentumokkal a Delphiben? Konkrétan a TXMLDocumenttel? Az XML dokumentumobjektum modell használata.

Sok Delphi programozó számára a beállítások mentése a használathoz kapcsolódik INI fájlokat a programjaikban. Ennek a módszernek az alkalmazása, többé-kevésbé komoly projektekben kerülendő, mert korlátozza a rugalmasságot, ami megakadályozza a program további bővítését. Azt kell mondani, hogy ez a megközelítés meglehetősen népszerű a könnyű kezelhetőség és a beépített eszközök fejlesztői környezetben való jelenléte miatt.

Azonban strukturált XML fájlokat. Előnyük, hogy a paraméterek száma nem rögzíthető. Ennek jobb megértéséhez vegyünk egy konkrét példát.

Az USearch programban egy bejegyzésre kattintva egy helyi menü jelenik meg, amelyben megjelenik az elemek listája. Ezek az elemek parancsok, amelyek viszont a beállítások fájlból töltődnek be. Abban az esetben, ha a beállításokat elmentette INI fájlt, akkor a program elmenthet és betölthet bizonyos számú parancsot, például 10-et vagy 50-et. Amint nagyobb értékre van szükség, át kell írnia a kódot, és ennek megfelelően újra kell fordítania.


Egy megközelítés alkalmazása segítségével XML fájlokat, akkor az összes szakaszparamétert dinamikusan tudjuk majd betölteni. Ezenkívül a konfigurációs fájl elegánsabb lesz, redundáns paraméterszámozás nélkül. De, szabvány azt jelenti valakivel együtt dolgozni XML A Delphinek sok hátránya van, ezért javaslom a használatát szabványos könyvtár MSXML... Általában alapértelmezés szerint benne van operációs rendszer Windows család.


Kapcsolódni MSXML, létre kell hoznunk egy interfész fájlt az összes funkció listájával a COM szerverről történő importálással. Sok részletes cikket írtak a felület importálásáról, de javaslom, hogy töltse le a fájlt MSXML2_TLB.PAS használatra kész. A fájl letöltése után helyezze a projekt mellé, vagy dobja be a Delphi környezet lib mappájába. Így minden létrehozott program képes lesz használni a modult MSXML, csak hozzá kell adnia az MSXML2_TLB sort a felhasználásokhoz.

Az érthetőség kedvéért tekintse meg a következő példát a könyvtár használatára:

Eljárás LoadData; var XMLDoc: DOMDocument; Gyökér: IXMLDOMElement; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Gyökér: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("méret / szélesség"). Szöveg); Gyökér: = nulla; XMLDoc: = nulla; vége;

Először a DOMDocument osztály példánya jön létre, majd a settings.xml fájl tartalma betöltődik a memóriába. Mivel a szabvány szerint bármilyen XML a fájlnak tartalmaznia kell a gyökér címkét (in ebben az esetben config), akkor a függvény segítségével kell megszereznünk DocumentElement... Ezután a tartalom megjelenik a címkék között. , amelyek viszont a címkék között vannak ... Így a settings.xml fájlból metódusunk megjeleníti a szöveget a MessageBoxban "100px".

500 képpont 100 képpont

Itt a SelectSingleNode metódus kerül alkalmazásra, amely egy karakterláncot vesz paraméterként

Annak ellenére, hogy az XML-lel való munka témáját a Delphiben széles körben vitatták meg az interneten, a témával kapcsolatos kérdések gyakran felmerülnek mindenféle fórumon.

Én is ezt írtam, de szeretnék visszatérni egy XML fájl gyors elemzésének és az adatok kinyerésének valós esetéhez, amit ma a munkahelyemen megtettem. Legfeljebb 5 percbe telt, mire megszereztem a szükséges adatokat.

Háttér. Ma adatokat kellett feldolgoznom kb telepített programokat a felhasználók számítógépén (igen, igen, azonosítjuk a kalózokat :)). A műszaki osztály átadta nekem ezeket az információkat, amelyeket WMI-t használó hálózaton keresztül, gyanútlan felhasználóktól kaptam. Az általuk használt program jelentéseket készít XML formátum... Ennek megfelelően egy hegynyi, meglehetősen bonyolult szerkezetű XML fájlt hoztak nekem, amiből csak a telepített szoftvertermékek nevét kellett kihúznom.

Kezelés . Miután megnéztem néhány fájlt kézzel, rájöttem, hogy nem tart sokáig, hogy megöregedjek, és úgy döntöttem, írok egy kis konvertert. A Delphi elindítása után kiválasztottam az XML DataBinding objektumot a tárolóból, és betápláltam az egyik fájlba. Alapértelmezés szerint minden beállítást és paramétert hagytam, és ennek eredményeként egy modult nagy mennyiség osztályok és interfészek az XML-fájl elemeinek eléréséhez. Sokáig nem foglalkoztam az órák felépítésével, azonnal áttértem a konverter írására.

Egy új konzolalkalmazásban írtam néhány nagyon egyszerű kódot:


program XML2TXT;

használ
nyomtatványok,
Osztályok, SysUtils,
SoftwareXML a "SoftwareXML.pas"-ban;

eljárás CovertXML2Text;
var
softbase: IXMLSTDSoftwareType;
i: egész szám;
sr: TSearchRec;
CurDir: string;
ExportFile: TStringList;
kezdődik
CurDir: = IncludeTrailingPathDelimiter (ExtractFilePath (Application.ExeName));
ha FindFirst (CurDir + "*. xml", faAnyFile, sr) = 0, akkor
ismétlés
ExportFile: = TStringList.Create;
softbase: = LoadSTDSoftware (Pchar (CurDir + sr.Name));
i esetén: = 0 a softbase-hez.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;
amíg FindNext (sr) 0;
vége;

kezdődik
Alkalmazás.Inicializálás;
CovertXML2Text;
vége.

Ennek eredményeként a rács minden számítógépéhez kaptam egy szövegszerkesztőt, amely tartalmazza a telepített szoftverek listáját.

Úgy érzem, ez a kód némi magyarázatot igényel. Például miért használtam a Forms modult egy konzolalkalmazásban, és miért hívtam meg az Application.Initialize; eljárást?

Valójában egyszerű – ez egy kis hack, amely lehetővé teszi az XML adatkötés használatát konzolalkalmazásban. Mert makacsul megtagadta az osztály inicializálását az XML-lel való munkához. Még nem jöttem rá a valódi okokra - ma az idő fontos volt, 5 percből 4 percet már ezzel a hibával küzdöttem. :) Szerintem később foglalkozz ezzel a problémával és írd meg mi a valódi oka.

A fura softbase osztályt egy XML fájlból hozták létre – ez a gyökérelem neve, a softbase.InstalledSoftware.source.software [i] .DisplayName csupán a beágyazott elemek közötti navigációt jelenti a kívánt elemhez, és megkapja annak értékét.

Így az egyik legtöbb gyors utakat Dolgozik XML-lel a Delphiben.

Az XML-t egyre gyakrabban használják információk tárolására és alkalmazások és webhelyek közötti cseréjére. Sok alkalmazás ezt a nyelvet használja alapnyelvként az adatok tárolására, míg mások XML adatok exportálására és importálására használják. Tehát itt az ideje, hogy a fejlesztők elkezdjenek gondolkodni azon, hogyan használhatják fel az XML-adatokat saját alkalmazásaikban.

Ebben a cikkben az XML Document Object Model (DOM) és az XML DOM Microsoft általi megvalósítását tekintjük meg.

Az XML DOM egy objektummodell, amely objektumokat biztosít a fejlesztők számára az XML-fájlok betöltéséhez és feldolgozásához. Az objektummodell a következő alapvető objektumokból áll: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap és XMLDOMParseError. Ezen objektumok mindegyike (az XMLDOMParseError kivételével) olyan tulajdonságokat és metódusokat tartalmaz, amelyek lehetővé teszik az objektumról információk megszerzését, az objektum értékeinek és szerkezetének kezelését, valamint az XML-dokumentum szerkezetében való navigálást.

Nézzük meg a fő XML DOM objektumokat, és mutassunk néhány példát ezek használatára a Borland Delphiben.

XML DOM használata a Borland Delphiben

A Microsoft XML DOM Delphi alkalmazásokban való használatához csatlakoztatnia kell a megfelelő típuskönyvtárat a projekthez. Ehhez végrehajtjuk a Project | parancsot Import Type Library és az Import Type Library párbeszédpanelen válassza ki a Microsoft XML 2.0 verziójú (2.0 verzió) könyvtárat, amely általában a Windows \ System \ MSXML.DLL fájlban található.

Az Egység létrehozása gombra kattintás után létrejön az MSXML_TLB interfész modul, amely lehetővé teszi az XML DOM objektumok használatát: DOMDocument, XMLDocument, XMLHTTPRequest és még sok más, az MSXML.DLL könyvtárban implementálva. Az MSXML_TLB modulra való hivatkozásnak szerepelnie kell a Felhasználások listában.

XML DOM eszköz

A Dokumentumobjektum-modell egy XML-dokumentumot képvisel ágak fastruktúrájában. Az XML DOM API-k lehetővé teszik az alkalmazások számára, hogy navigáljanak a dokumentumfán és kezeljék annak ágait. Minden ágnak lehet egy meghatározott típusa (DOMNodeType), amely szerint a szülő és gyermek ágak kerülnek meghatározásra. A legtöbb XML dokumentum elem, attribútum és szöveg típusú ágakat tartalmaz. Az attribútumok az ágak speciális fajtái, és nem gyermekágak. Az attribútumok kezeléséhez használja a speciális módszerek XML DOM objektumok biztosítják.

A World Wide Web Consortium (W3C) által javasolt interfészek megvalósítása mellett a Microsoft XML DOM olyan módszereket is tartalmaz, amelyek támogatják az XSL-t, az XSL-mintákat, a névtereket és az adattípusokat. Például a SelectNodes metódus lehetővé teszi az XSL minta szintaxis használatát az ágak kereséséhez egy adott környezetben, a TransformNode metódus pedig támogatja az XSL használatát az átalakítások végrehajtásához.

Tesztelje az XML-dokumentumot

Példaként egy XML dokumentumot vegyünk egy zenei CD-ROM könyvtárat, amely a következő szerkezettel rendelkezik:

Empire burleszk Bob dylan USA Kolumbia 10.90 1985 Rejtsd el a szívedet Bonnie Tylor Egyesült Királyság CBS Records 9.90 1988 ... Engedd szabadjára a szívem Joe Cocker USA EMI 8.20 1987

Most már készen állunk az XML DOM objektummodell vizsgálatára, kezdve az XMLDOMDocument objektummal.

XML dokumentum – XMLDOMDocument Object

Az XML dokumentummal való munka a betöltéssel kezdődik. Ehhez a Load metódust használjuk, amelynek egyetlen paramétere van, amely a betöltött dokumentum URL-jét adja meg. Fájlok helyi lemezről történő betöltésekor csak a teljes fájlnév kerül megadásra (a fájl: /// protokoll ebben az esetben elhagyható). Ha az XML-dokumentum karakterláncként van tárolva, használja a LoadXML metódust a dokumentum betöltéséhez.

Az Async tulajdonság a dokumentum betöltésének módját szabályozza (szinkron vagy aszinkron). Alapértelmezés szerint ez a tulajdonság True értékre van állítva, ami azt jelzi, hogy a dokumentum aszinkron módon töltődik be, és a vezérlés visszakerül az alkalmazáshoz, mielőtt a dokumentum teljesen betöltődik. Ellenkező esetben a dokumentum szinkronban töltődik be, majd ellenőrizni kell a ReadyState tulajdonság értékét, hogy megtudja, hogy a dokumentum betöltődött-e vagy sem. Létrehozhat egy kezelőt is az OnReadyStateChange eseményhez, amely átveszi az irányítást, amikor a ReadyState tulajdonság értéke megváltozik.

Az alábbiakban bemutatjuk, hogyan tölthet be XML-dokumentumot a Betöltés módszerrel:

Használja a ... MSXML_TLB ... eljárást TForm1.Button1Click (Feladó: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // // Itt található az a kód, amely // az XML dokumentumot és annak ágait manipulálja // XMLDoc: = Nil; vége;

A dokumentum betöltése után hozzáférhetünk a tulajdonságaihoz. Tehát a NodeName tulajdonság a #document értéket, a NodeTypeString tulajdonság a dokumentum értéket, az URL tulajdonság pedig a következő fájlt fogja tartalmazni: /// C: /DATA/DATA.xml érték.

Hibakezelés

Különösen érdekesek a dokumentumok betöltéskor történő feldolgozásához kapcsolódó tulajdonságok. Például a ParseError tulajdonság egy XMLDOMParseError objektumot ad vissza, amely információkat tartalmaz a dokumentum feldolgozása közben fellépő hibáról.

Hibakezelő írásához a következő kódot adhatja hozzá:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load ('C: \ DATA \ DATA.xml'); XMLError: = XMLDoc.ParseError; Ha az XMLError.ErrorCode<>0 Ezután // // Itt kezeljük a hibát // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;

Ha meg szeretné tudni, milyen információkat ad vissza hiba esetén, módosítsa a következő címtárbejegyzést:

Empire burleszk Bob dylan USA Kolumbia 10.90 1985

a záróelem eltávolítása a második sorban:</p><p> <CD> <TITLE>Empire burleszk <ARTIST>Bob dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Kolumbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Most írjunk egy kódot, amely visszaadja az XMLDOMParseError objektum tulajdonságértékeit:</p><p>XMLError: = XMLDoc.ParseError; Ha az XMLError.ErrorCode<>0 Ezután az XMLError segítségével a Memo1.Lines elkezdi a Hozzáadást ('Fájl:' + URL); Add (’Kód:’ + IntToStr (ErrorCode)); Add (’Hiba:’ + Ok); Add (’Szöveg:’ + SrcText); Add (’Sor:’ + IntToStr (Line)); Add (’Pozíció:’ + IntToStr (LinePos)); vége Else Memo1.Lines.Add (XMLDoc.XML); Vége;</p><p>és hajtsa végre az alkalmazásunkat. Ennek eredményeként a következő információkat kapjuk a hibáról.</p> <p>Amint a fenti példából látható, az XMLDOMParseError objektum által visszaadott információ elégséges a hiba lokalizálásához és az előfordulás okának megértéséhez.</p> <p>Most visszaállítjuk a záróelemet <TITLE>dokumentumunkban, és folytassuk az XML DOM-ról szóló tárgyalásunkat.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>A dokumentumfa elérése</h2> <p>A dokumentumfa eléréséhez beszerezheti a gyökérelemet, majd ismételheti a gyermekágain, vagy kereshet egy adott ágat. Az első esetben a DocumentElement tulajdonságon keresztül kapjuk meg a gyökérelemet, amely egy XMLDOMNode típusú objektumot ad vissza. A következőképpen használhatja a DocumentElement tulajdonságot az egyes gyermekelemek tartalmának lekéréséhez:</p><p>Var csomópont: IXMLDOMNode; Gyökér: IXMLDOMElement; I: Integer; ... Gyökér: = XMLDoc.DocumentElement; I esetén: = 0 - Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Node.Text); Vége;</p><p>XML dokumentumunkhoz a következő szöveget kapjuk.</p> <p>Ha egy adott ágra vagy az első gyermekág alatti ágra vagyunk kíváncsiak, használhatjuk a NodeFromID metódust vagy az XMLDOMDocument objektum GetElementByTagName metódusát.</p> <p>A NodeFromID metódus egyedi azonosítót igényel az XML-séma vagy a dokumentumtípus-meghatározás (DTD) szerint, és egy ágat ad vissza ezzel az azonosítóval.</p> <p>A GetElementByTagName metódus egy karakterláncot igényel egy adott elemmel (címkével), és minden ágat ezzel az elemmel ad vissza. A következőképpen használhatja ezt a módszert, hogy megtalálja az összes előadót a CD-ROM-könyvtárunkban:</p><p>Csomópontok: IXMLDOMNodeList; Csomópont: IXMLDOMNode; ... Csomópontok: = XMLDoc.GetElementsByTagName ('ARTIST'); I-nél: = 0-tól Csomópontokig.Length-1 do Begin Node: = Csomópontok.Elem [I]; Memo1.Lines.Add (Node.Text); Vége;</p><p>XML dokumentumunkhoz a következő szöveget kapjuk</p> <p>Vegye figyelembe, hogy az XMLDOMNode objektum SelectNodes metódusa rugalmasabb módot biztosít a dokumentumágak elérésére. De erről lentebb bővebben.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumentum ág - XMLDOMNode objektum</h2> <p>Az XMLDOMNode objektum egy dokumentum ágat képvisel. Már találkoztunk ezzel az objektummal, amikor megkaptuk a dokumentum gyökérelemét:</p><p>Gyökér: = XMLDoc.DocumentElement;</p><p>Ha információkat szeretne szerezni egy XML-dokumentum egy ágáról, használhatja az XMLDOMNode objektum tulajdonságait (1. táblázat).</p> <p>Az elágazásban tárolt adatok eléréséhez általánosan elterjedt a NodeValue tulajdonság használata (amely attribútumokhoz, szövegágakhoz, megjegyzésekhez, feldolgozási utasításokhoz és CDATA szakaszokhoz érhető el), vagy a Text tulajdonságot, amely az ág szöveges tartalmát adja vissza, vagy a NodeTypedValue tulajdonságot. Ez utóbbi azonban csak a gépelt tételekkel rendelkező ágaknál használható.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigálás a dokumentumfán</h3> <p>Az XMLDOMNode objektum számos módot kínál a dokumentumfában való navigálásra. Például a szülőág eléréséhez használja a ParentNode tulajdonságot (XMLDOMNode típus), a gyermekágakat pedig a ChildNodes tulajdonságokon (XMLDOMNodeList típus), FirstChild és LastChild (XMLDOMNode típus) stb. Az OwnerDocument tulajdonság egy XMLDOMDocument objektumot ad vissza, amely magát az XML dokumentumot azonosítja. A fent felsorolt ​​tulajdonságok megkönnyítik a dokumentumfában való navigálást.</p> <p>Most nézzük át az XML dokumentum összes ágát:</p><p>Gyökér: = XMLDoc.DocumentElement; I esetén: = 0 - Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Node, 0); Vége;</p><p>Ahogy fentebb megjegyeztük, az XMLDOMNode objektum SelectNodes-ja rugalmasabb módot biztosít a dokumentumágak elérésére. Ezenkívül létezik egy SelectSingleNode metódus, amely csak a dokumentum első ágát adja vissza. Mindkét módszer lehetővé teszi XSL-sablonok meghatározását az ágkeresésekhez.</p> <p>Nézzük meg a SelectNodes metódus használatának folyamatát az összes olyan ág lekéréséhez, amely rendelkezik CD-ággal és PRICE-alággal:</p><p>Gyökér: = XMLDoc.DocumentElement; Csomópontok: = Root.SelectNodes ('CD / PRICE');</p><p>A CD ág összes PRICE alága a Nodes gyűjteménybe kerül. Kicsit később visszatérünk az XSL-sablonok megvitatására.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Gyermekágak manipulálása</h3> <p>A gyermekágak kezeléséhez használhatjuk az XMLDOMNode objektum metódusait (2. táblázat).</p> <p>Az első lemez rekordjának teljes törléséhez futtassa a következő kódot:</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // A gyökérelem lekérése Root: = XMLDoc.DocumentElement; Csomópont: = Gyökér; // Az első gyermek ág eltávolítása Node.RemoveChild (Node.FirstChild);</p><p>Vegye figyelembe, hogy ebben a példában az első gyermekágat töröljük. Az alábbiakban látható, hogyan távolítható el az első gyermekág első eleme:</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // A gyökérelem lekérése Root: = XMLDoc.DocumentElement; // és az első gyermek ág Node: = Root.FirstChild; // Az első gyermek ág eltávolítása Node.RemoveChild (Node.FirstChild);</p><p>A fenti példában nem az első ágat töröltük <CD>…</CD> az ág első eleme pedig az <TITLE>….

Most adjunk hozzá egy új ágat. Az alábbiakban egy új zenei CD-ROM-bejegyzés hozzáadását mutató kód látható:

Var NewNode: IXMLDOMNode; Gyermek: IXMLDOMNode; ... // Új ág létrehozása - NewNode: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Elem hozzáadása Gyermek: = XMLDoc.CreateNode (1, 'CÍM', ''); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = 'Pink Floyd'; // Elem hozzáadása <ARTIST>Gyermek: = XMLDoc.CreateNode (1, ‘MŰVÉSZ’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = 'Division Bell'; // Elem hozzáadása <COUNTRY>Gyermek: = XMLDoc.CreateNode (1, ‘ORSZÁG’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘UK’; // Elem hozzáadása <COMPANY>Gyermek: = XMLDoc.CreateNode (1, ‘VÁLLALAT’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘EMI Records Ltd.’; // Elem hozzáadása <PRICE>Gyermek: = XMLDoc.CreateNode (1, 'ÁR', ''); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = '11 .99 "; // Elem hozzáadása <YEAR>Gyermek: = XMLDoc.CreateNode (1, ‘ÉV’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘1994’; // És adjunk hozzá egy ágat Root.AppendChild (NewNode); ...</p><p>A fenti kód a következő lépések sorozatát mutatja egy új ág hozzáadásához:</p> <ul><li>Új ág létrehozása CreateNode metódussal: <ul><li>elem létrehozása a CreateNode metódussal;</li> <li>elem hozzáadása egy ághoz az AppendChild metódussal;</li> <li>egy elem értékének beállítása a Text tulajdonságon keresztül;</li> <li>… Ismételje meg az összes elemre.</li> </ul></li> <li>Új ág hozzáadása a dokumentumhoz az AppendChild metódussal.</li> </ul><p>Emlékezzünk vissza, hogy az AppendChild metódus hozzáad egy ágat a fa végéhez. Ha egy ágat szeretne hozzáadni a fa egy adott helyéhez, az InsertBefore metódust kell használnia.</p> <h2>Elágazáskészlet - XMLDOMNodeList objektum</h2> <p>Az XMLNodeList objektum elágazások listáját tartalmazza, amelyek a SelectNodes vagy a GetElementsByTagName metódusokkal építhetők fel, és a ChildNodes tulajdonságból is beszerezhetők.</p> <p>Ennek az objektumnak a használatát már tárgyaltuk a „Navigáció a dokumentumfában” részben található példában. Itt néhány elméleti megjegyzést teszünk.</p> <p>A listában szereplő ágak számát a Length tulajdonság értékeként kaphatjuk meg. Az ágak 0-tól Length-1-ig vannak indexelve, és minden egyes ág elérhető a megfelelő indexelt elemen keresztül az Item tömbben.</p> <p>Az ágak listájában való navigálás a NextNode metódussal is elvégezhető, amely a lista következő ágát adja vissza, vagy a nullát, ha az aktuális ág az utolsó. A lista elejére való visszatéréshez hívja a Reset metódust.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumentumok létrehozása és mentése</h2> <p>Tehát bemutattuk, hogyan adhat hozzá ágakat és elemeket a meglévő XML dokumentumokhoz. Most hozzunk létre egy XML dokumentumot menet közben. Először is ne feledje, hogy egy dokumentum nem csak URL-ből, hanem normál karakterláncból is betölthető. A következőképpen hozhat létre gyökérelemet, amellyel dinamikusan felépíthető a többi elem (amivel már foglalkoztunk a Gyermekágak manipulálása részben):</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; S: WideString; ... S: = " <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.LoadXML (S); Gyökér: = XMLDoc.DocumentElement; Node: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (Node); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;</p><p>Az XML dokumentum elkészítése után mentse el egy fájlba a Mentés módszerrel. Például:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>A fájlba való mentésen túl a Mentés módszerrel XML-dokumentumot is elmenthet egy új XMLDOMDocument objektumba. Ebben az esetben a dokumentum teljes feldolgozása megtörténik, és ennek eredményeként a szerkezet és a szintaxis ellenőrzésre kerül. Így menthet egy dokumentumot egy másik objektumba:</p><p>Eljárás TForm1.Button2Click (Feladó: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = nulla; vége;</p><p>Összefoglalva, a Mentés metódus azt is lehetővé teszi, hogy az XML-dokumentumot más COM-objektumokra is elmentse, amelyek támogatják az IStream, IPersistStream vagy IPersistStreamInit interfészt.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XSL sablonok használata</h2> <p>Az XMLDOMNode objektum SelectNodes metódusának tárgyalásakor megemlítettük, hogy ez rugalmasabb módot biztosít a dokumentumágak elérésére. A rugalmasság az, hogy megadhat egy XSL-sablont az ágak kiválasztásának kritériumaként. Az ilyen sablonok hatékony mechanizmust biztosítanak az XML dokumentumokban található információk megtalálásához. Például, ha egy listát szeretne kapni a könyvtárunkban található összes zenei CD-ROM címről, futtassa a következő lekérdezést:</p><p>Hogy megtudja, mely művészek lemezei jelennek meg az Egyesült Államokban, a kérés a következőképpen alakul:</p><p>Csomópontok: = Root.SelectNodes ('CD / ARTIST');</p><p>A következőképpen találhatja meg az első meghajtót egy könyvtárban:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>És utolsó:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>Bob Dylan lemezeinek megkereséséhez futtassa a következő lekérdezést:</p><p>Nodes: = Root.SelectNodes (’CD [$ any $ ARTIST =” Bob Dylan ”] / CÍM’);</p><p>és az 1985 után készült lemezek listájának megjelenítéséhez a következő lekérdezést futtatjuk:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>Az XSL szintaxis részletesebb ismertetése külön publikációt igényel. Az olvasók felkeltése és a további kutatások ösztönzése érdekében csak egy kis példát mutatok be az XSL lehetséges használatára. Tegyük fel, hogy a katalógusunkat normál HTML-táblázattá kell konvertálnunk. A hagyományos módszerekkel végig kell iterálni a fa összes ágát, és minden kapott elemhez ki kell alakítani a megfelelő címkéket. <TD>…</TD>.</p> <p>Az XSL használatával egyszerűen létrehozunk egy sablont (vagy stíluslapot), amely meghatározza, hogy mit és hogyan kell átalakítani. Ezután ráhelyezzük ezt a sablont a katalógusunkra – és kész: van egy XSL-sablon szövege, amely a katalógust táblázattá alakítja (2. lista).</p> <p>A kód, amely egy XSL-sablont lefed a könyvtárunkban, így néz ki:</p><p>Eljárás TForm1.Button2Click (Feladó: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nulla; vége;</p><p>Az XSL-ről szóló vitánkat befejezve elmondható, hogy jelenleg ezt a nyelvet aktívan használják különféle XML dokumentumok közötti transzformációra, valamint dokumentumok formázására.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Következtetés</h2> <p>Nyilvánvaló okokból lehetetlen egyetlen cikkben lefedni az összes Microsoft XML DOM objektumot, és példákat adni a használatukra. Itt most az XML DOM alkalmazásokban való használatának alapvető kérdéseit érintettük. asztal A 3. ábra a Microsoft XML DOM-ban megvalósított összes objektumot mutatja.</p> <p>ComputerPress 12 "2000</p> <p>Az XML-t egyre gyakrabban használják információk tárolására és alkalmazások és webhelyek közötti cseréjére. Sok alkalmazás ezt a nyelvet használja alapnyelvként az adatok tárolására, míg mások XML adatok exportálására és importálására használják. Tehát itt az ideje, hogy a fejlesztők elkezdjenek gondolkodni azon, hogyan használhatják fel az XML-adatokat saját alkalmazásaikban.</p> <p>Ebben a cikkben az XML Document Object Model (DOM) és az XML DOM Microsoft általi megvalósítását tekintjük meg.</p> <p>Az XML DOM egy objektummodell, amely objektumokat biztosít a fejlesztők számára az XML-fájlok betöltéséhez és feldolgozásához. Az objektummodell a következő alapvető objektumokból áll: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap és XMLDOMParseError. Ezen objektumok mindegyike (az XMLDOMParseError kivételével) olyan tulajdonságokat és metódusokat tartalmaz, amelyek lehetővé teszik az objektumról információk megszerzését, az objektum értékeinek és szerkezetének kezelését, valamint az XML-dokumentum szerkezetében való navigálást.</p> <p>Nézzük meg a fő XML DOM objektumokat, és mutassunk néhány példát ezek használatára a Borland Delphiben.</p> <h2>XML DOM használata a Borland Delphiben</h2> <p>A Microsoft XML DOM Delphi alkalmazásokban való használatához csatlakoztatnia kell a megfelelő típuskönyvtárat a projekthez. Ehhez végrehajtjuk a Project | parancsot Import Type Library és az Import Type Library párbeszédpanelen válassza ki a Microsoft XML 2.0 verziójú (2.0 verzió) könyvtárat, amely általában a Windows \ System \ MSXML.DLL fájlban található.</p> <p>Az Egység létrehozása gombra kattintás után létrejön az MSXML_TLB interfész modul, amely lehetővé teszi az XML DOM objektumok használatát: DOMDocument, XMLDocument, XMLHTTPRequest és még sok más, az MSXML.DLL könyvtárban implementálva. Az MSXML_TLB modulra való hivatkozásnak szerepelnie kell a Felhasználások listában.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XML DOM eszköz</h2> <p>A Dokumentumobjektum-modell egy XML-dokumentumot képvisel ágak fastruktúrájában. Az XML DOM API-k lehetővé teszik az alkalmazások számára, hogy navigáljanak a dokumentumfán és kezeljék annak ágait. Minden ágnak lehet egy meghatározott típusa (DOMNodeType), amely szerint a szülő és gyermek ágak kerülnek meghatározásra. A legtöbb XML dokumentum elem, attribútum és szöveg típusú ágakat tartalmaz. Az attribútumok az ágak speciális fajtái, és nem gyermekágak. Az XML DOM objektumok által biztosított speciális módszereket használják az attribútumok manipulálására.</p> <p>A World Wide Web Consortium (W3C) által javasolt interfészek megvalósítása mellett a Microsoft XML DOM olyan módszereket is tartalmaz, amelyek támogatják az XSL-t, az XSL-mintákat, a névtereket és az adattípusokat. Például a SelectNodes metódus lehetővé teszi az XSL minta szintaxis használatát az ágak kereséséhez egy adott környezetben, a TransformNode metódus pedig támogatja az XSL használatát az átalakítások végrehajtásához.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Tesztelje az XML-dokumentumot</h2> <p>Példaként egy XML dokumentumot vegyünk egy zenei CD-ROM könyvtárat, amely a következő szerkezettel rendelkezik:</p><p> <?xml version=”1.0"?> <CATALOG> <CD> <TITLE>Empire burleszk Bob dylan USA Kolumbia 10.90 1985 Rejtsd el a szívedet Bonnie Tylor Egyesült Királyság CBS Records 9.90 1988 ... Engedd szabadjára a szívem Joe Cocker USA EMI 8.20 1987

Most már készen állunk az XML DOM objektummodell vizsgálatára, kezdve az XMLDOMDocument objektummal.

XML dokumentum – XMLDOMDocument Object

Az XML dokumentummal való munka a betöltéssel kezdődik. Ehhez a Load metódust használjuk, amelynek egyetlen paramétere van, amely a betöltött dokumentum URL-jét adja meg. Fájlok helyi lemezről történő betöltésekor csak a teljes fájlnév kerül megadásra (a fájl: /// protokoll ebben az esetben elhagyható). Ha az XML-dokumentum karakterláncként van tárolva, használja a LoadXML metódust a dokumentum betöltéséhez.

Az Async tulajdonság a dokumentum betöltésének módját szabályozza (szinkron vagy aszinkron). Alapértelmezés szerint ez a tulajdonság True értékre van állítva, ami azt jelzi, hogy a dokumentum aszinkron módon töltődik be, és a vezérlés visszakerül az alkalmazáshoz, mielőtt a dokumentum teljesen betöltődik. Ellenkező esetben a dokumentum szinkronban töltődik be, majd ellenőrizni kell a ReadyState tulajdonság értékét, hogy megtudja, hogy a dokumentum betöltődött-e vagy sem. Létrehozhat egy kezelőt is az OnReadyStateChange eseményhez, amely átveszi az irányítást, amikor a ReadyState tulajdonság értéke megváltozik.

Az alábbiakban bemutatjuk, hogyan tölthet be XML-dokumentumot a Betöltés módszerrel:

Használja a ... MSXML_TLB ... eljárást TForm1.Button1Click (Feladó: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // // Itt található az a kód, amely // az XML dokumentumot és annak ágait manipulálja // XMLDoc: = Nil; vége;

A dokumentum betöltése után hozzáférhetünk a tulajdonságaihoz. Tehát a NodeName tulajdonság a #document értéket, a NodeTypeString tulajdonság a dokumentum értéket, az URL tulajdonság pedig a következő fájlt fogja tartalmazni: /// C: /DATA/DATA.xml érték.

Hibakezelés

Különösen érdekesek a dokumentumok betöltéskor történő feldolgozásához kapcsolódó tulajdonságok. Például a ParseError tulajdonság egy XMLDOMParseError objektumot ad vissza, amely információkat tartalmaz a dokumentum feldolgozása közben fellépő hibáról.

Hibakezelő írásához a következő kódot adhatja hozzá:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load ('C: \ DATA \ DATA.xml'); XMLError: = XMLDoc.ParseError; Ha az XMLError.ErrorCode<>0 Ezután // // Itt kezeljük a hibát // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;

Ha meg szeretné tudni, milyen információkat ad vissza hiba esetén, módosítsa a következő címtárbejegyzést:

Empire burleszk Bob dylan USA Kolumbia 10.90 1985

a záróelem eltávolítása a második sorban:</p><p> <CD> <TITLE>Empire burleszk <ARTIST>Bob dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Kolumbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Most írjunk egy kódot, amely visszaadja az XMLDOMParseError objektum tulajdonságértékeit:</p><p>XMLError: = XMLDoc.ParseError; Ha az XMLError.ErrorCode<>0 Ezután az XMLError segítségével a Memo1.Lines elkezdi a Hozzáadást ('Fájl:' + URL); Add (’Kód:’ + IntToStr (ErrorCode)); Add (’Hiba:’ + Ok); Add (’Szöveg:’ + SrcText); Add (’Sor:’ + IntToStr (Line)); Add (’Pozíció:’ + IntToStr (LinePos)); vége Else Memo1.Lines.Add (XMLDoc.XML); Vége;</p><p>és hajtsa végre az alkalmazásunkat. Ennek eredményeként a következő információkat kapjuk a hibáról.</p> <p>Amint a fenti példából látható, az XMLDOMParseError objektum által visszaadott információ elégséges a hiba lokalizálásához és az előfordulás okának megértéséhez.</p> <p>Most visszaállítjuk a záróelemet <TITLE>dokumentumunkban, és folytassuk az XML DOM-ról szóló tárgyalásunkat.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>A dokumentumfa elérése</h2> <p>A dokumentumfa eléréséhez beszerezheti a gyökérelemet, majd ismételheti a gyermekágain, vagy kereshet egy adott ágat. Az első esetben a DocumentElement tulajdonságon keresztül kapjuk meg a gyökérelemet, amely egy XMLDOMNode típusú objektumot ad vissza. A következőképpen használhatja a DocumentElement tulajdonságot az egyes gyermekelemek tartalmának lekéréséhez:</p><p>Var csomópont: IXMLDOMNode; Gyökér: IXMLDOMElement; I: Integer; ... Gyökér: = XMLDoc.DocumentElement; I esetén: = 0 - Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Node.Text); Vége;</p><p>XML dokumentumunkhoz a következő szöveget kapjuk.</p> <p>Ha egy adott ágra vagy az első gyermekág alatti ágra vagyunk kíváncsiak, használhatjuk a NodeFromID metódust vagy az XMLDOMDocument objektum GetElementByTagName metódusát.</p> <p>A NodeFromID metódus egyedi azonosítót igényel az XML-séma vagy a dokumentumtípus-meghatározás (DTD) szerint, és egy ágat ad vissza ezzel az azonosítóval.</p> <p>A GetElementByTagName metódus egy karakterláncot igényel egy adott elemmel (címkével), és minden ágat ezzel az elemmel ad vissza. A következőképpen használhatja ezt a módszert, hogy megtalálja az összes előadót a CD-ROM-könyvtárunkban:</p><p>Csomópontok: IXMLDOMNodeList; Csomópont: IXMLDOMNode; ... Csomópontok: = XMLDoc.GetElementsByTagName ('ARTIST'); I-nél: = 0-tól Csomópontokig.Length-1 do Begin Node: = Csomópontok.Elem [I]; Memo1.Lines.Add (Node.Text); Vége;</p><p>XML dokumentumunkhoz a következő szöveget kapjuk</p> <p>Vegye figyelembe, hogy az XMLDOMNode objektum SelectNodes metódusa rugalmasabb módot biztosít a dokumentumágak elérésére. De erről lentebb bővebben.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumentum ág - XMLDOMNode objektum</h2> <p>Az XMLDOMNode objektum egy dokumentum ágat képvisel. Már találkoztunk ezzel az objektummal, amikor megkaptuk a dokumentum gyökérelemét:</p><p>Gyökér: = XMLDoc.DocumentElement;</p><p>Ha információkat szeretne szerezni egy XML-dokumentum egy ágáról, használhatja az XMLDOMNode objektum tulajdonságait (1. táblázat).</p> <p>Az elágazásban tárolt adatok eléréséhez általánosan elterjedt a NodeValue tulajdonság használata (amely attribútumokhoz, szövegágakhoz, megjegyzésekhez, feldolgozási utasításokhoz és CDATA szakaszokhoz érhető el), vagy a Text tulajdonságot, amely az ág szöveges tartalmát adja vissza, vagy a NodeTypedValue tulajdonságot. Ez utóbbi azonban csak a gépelt tételekkel rendelkező ágaknál használható.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Navigálás a dokumentumfán</h3> <p>Az XMLDOMNode objektum számos módot kínál a dokumentumfában való navigálásra. Például a szülőág eléréséhez használja a ParentNode tulajdonságot (XMLDOMNode típus), a gyermekágakat pedig a ChildNodes tulajdonságokon (XMLDOMNodeList típus), FirstChild és LastChild (XMLDOMNode típus) stb. Az OwnerDocument tulajdonság egy XMLDOMDocument objektumot ad vissza, amely magát az XML dokumentumot azonosítja. A fent felsorolt ​​tulajdonságok megkönnyítik a dokumentumfában való navigálást.</p> <p>Most nézzük át az XML dokumentum összes ágát:</p><p>Gyökér: = XMLDoc.DocumentElement; I esetén: = 0 - Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Node, 0); Vége;</p><p>Ahogy fentebb megjegyeztük, az XMLDOMNode objektum SelectNodes-ja rugalmasabb módot biztosít a dokumentumágak elérésére. Ezenkívül létezik egy SelectSingleNode metódus, amely csak a dokumentum első ágát adja vissza. Mindkét módszer lehetővé teszi XSL-sablonok meghatározását az ágkeresésekhez.</p> <p>Nézzük meg a SelectNodes metódus használatának folyamatát az összes olyan ág lekéréséhez, amely rendelkezik CD-ággal és PRICE-alággal:</p><p>Gyökér: = XMLDoc.DocumentElement; Csomópontok: = Root.SelectNodes ('CD / PRICE');</p><p>A CD ág összes PRICE alága a Nodes gyűjteménybe kerül. Kicsit később visszatérünk az XSL-sablonok megvitatására.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Gyermekágak manipulálása</h3> <p>A gyermekágak kezeléséhez használhatjuk az XMLDOMNode objektum metódusait (2. táblázat).</p> <p>Az első lemez rekordjának teljes törléséhez futtassa a következő kódot:</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // A gyökérelem lekérése Root: = XMLDoc.DocumentElement; Csomópont: = Gyökér; // Az első gyermek ág eltávolítása Node.RemoveChild (Node.FirstChild);</p><p>Vegye figyelembe, hogy ebben a példában az első gyermekágat töröljük. Az alábbiakban látható, hogyan távolítható el az első gyermekág első eleme:</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.Load ('C: \ DATA \ DATA.xml'); // A gyökérelem lekérése Root: = XMLDoc.DocumentElement; // és az első gyermek ág Node: = Root.FirstChild; // Az első gyermek ág eltávolítása Node.RemoveChild (Node.FirstChild);</p><p>A fenti példában nem az első ágat töröltük <CD>…</CD> az ág első eleme pedig az <TITLE>….

Most adjunk hozzá egy új ágat. Az alábbiakban egy új zenei CD-ROM-bejegyzés hozzáadását mutató kód látható:

Var NewNode: IXMLDOMNode; Gyermek: IXMLDOMNode; ... // Új ág létrehozása - NewNode: = XMLDoc.CreateNode (1, ‘CD’, ‘’); // Elem hozzáadása Gyermek: = XMLDoc.CreateNode (1, 'CÍM', ''); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = 'Pink Floyd'; // Elem hozzáadása <ARTIST>Gyermek: = XMLDoc.CreateNode (1, ‘MŰVÉSZ’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = 'Division Bell'; // Elem hozzáadása <COUNTRY>Gyermek: = XMLDoc.CreateNode (1, ‘ORSZÁG’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘UK’; // Elem hozzáadása <COMPANY>Gyermek: = XMLDoc.CreateNode (1, ‘VÁLLALAT’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘EMI Records Ltd.’; // Elem hozzáadása <PRICE>Gyermek: = XMLDoc.CreateNode (1, 'ÁR', ''); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = '11 .99 "; // Elem hozzáadása <YEAR>Gyermek: = XMLDoc.CreateNode (1, ‘ÉV’, ‘’); // Elem hozzáadása NewNode.AppendChild (Child); // És állítsa be az értékét Child.Text: = ‘1994’; // És adjunk hozzá egy ágat Root.AppendChild (NewNode); ...</p><p>A fenti kód a következő lépések sorozatát mutatja egy új ág hozzáadásához:</p> <ul><li>Új ág létrehozása CreateNode metódussal: <ul><li>elem létrehozása a CreateNode metódussal;</li> <li>elem hozzáadása egy ághoz az AppendChild metódussal;</li> <li>egy elem értékének beállítása a Text tulajdonságon keresztül;</li> <li>… Ismételje meg az összes elemre.</li> </ul></li> <li>Új ág hozzáadása a dokumentumhoz az AppendChild metódussal.</li> </ul><p>Emlékezzünk vissza, hogy az AppendChild metódus hozzáad egy ágat a fa végéhez. Ha egy ágat szeretne hozzáadni a fa egy adott helyéhez, az InsertBefore metódust kell használnia.</p> <h2>Elágazáskészlet - XMLDOMNodeList objektum</h2> <p>Az XMLNodeList objektum elágazások listáját tartalmazza, amelyek a SelectNodes vagy a GetElementsByTagName metódusokkal építhetők fel, és a ChildNodes tulajdonságból is beszerezhetők.</p> <p>Ennek az objektumnak a használatát már tárgyaltuk a „Navigáció a dokumentumfában” részben található példában. Itt néhány elméleti megjegyzést teszünk.</p> <p>A listában szereplő ágak számát a Length tulajdonság értékeként kaphatjuk meg. Az ágak 0-tól Length-1-ig vannak indexelve, és minden egyes ág elérhető a megfelelő indexelt elemen keresztül az Item tömbben.</p> <p>Az ágak listájában való navigálás a NextNode metódussal is elvégezhető, amely a lista következő ágát adja vissza, vagy a nullát, ha az aktuális ág az utolsó. A lista elejére való visszatéréshez hívja a Reset metódust.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Dokumentumok létrehozása és mentése</h2> <p>Tehát bemutattuk, hogyan adhat hozzá ágakat és elemeket a meglévő XML dokumentumokhoz. Most hozzunk létre egy XML dokumentumot menet közben. Először is ne feledje, hogy egy dokumentum nem csak URL-ből, hanem normál karakterláncból is betölthető. A következőképpen hozhat létre gyökérelemet, amellyel dinamikusan felépíthető a többi elem (amivel már foglalkoztunk a Gyermekágak manipulálása részben):</p><p>Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; S: WideString; ... S: = " <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = Hamis; XMLDoc.LoadXML (S); Gyökér: = XMLDoc.DocumentElement; Node: = XMLDoc.CreateNode (1, ‘CD’, ‘’); Root.AppendChild (Node); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;</p><p>Az XML dokumentum elkészítése után mentse el egy fájlba a Mentés módszerrel. Például:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>A fájlba való mentésen túl a Mentés módszerrel XML-dokumentumot is elmenthet egy új XMLDOMDocument objektumba. Ebben az esetben a dokumentum teljes feldolgozása megtörténik, és ennek eredményeként a szerkezet és a szintaxis ellenőrzésre kerül. Így menthet egy dokumentumot egy másik objektumba:</p><p>Eljárás TForm1.Button2Click (Feladó: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = nulla; vége;</p><p>Összefoglalva, a Mentés metódus azt is lehetővé teszi, hogy az XML-dokumentumot más COM-objektumokra is elmentse, amelyek támogatják az IStream, IPersistStream vagy IPersistStreamInit interfészt.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>XSL sablonok használata</h2> <p>Az XMLDOMNode objektum SelectNodes metódusának tárgyalásakor megemlítettük, hogy ez rugalmasabb módot biztosít a dokumentumágak elérésére. A rugalmasság az, hogy megadhat egy XSL-sablont az ágak kiválasztásának kritériumaként. Az ilyen sablonok hatékony mechanizmust biztosítanak az XML dokumentumokban található információk megtalálásához. Például, ha egy listát szeretne kapni a könyvtárunkban található összes zenei CD-ROM címről, futtassa a következő lekérdezést:</p><p>Hogy megtudja, mely művészek lemezei jelennek meg az Egyesült Államokban, a kérés a következőképpen alakul:</p><p>Csomópontok: = Root.SelectNodes ('CD / ARTIST');</p><p>A következőképpen találhatja meg az első meghajtót egy könyvtárban:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>És utolsó:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>Bob Dylan lemezeinek megkereséséhez futtassa a következő lekérdezést:</p><p>Nodes: = Root.SelectNodes (’CD [$ any $ ARTIST =” Bob Dylan ”] / CÍM’);</p><p>és az 1985 után készült lemezek listájának megjelenítéséhez a következő lekérdezést futtatjuk:</p><p>Csomópontok: = Root.SelectNodes ('CD / CÍM');</p><p>Az XSL szintaxis részletesebb ismertetése külön publikációt igényel. Az olvasók felkeltése és a további kutatások ösztönzése érdekében csak egy kis példát mutatok be az XSL lehetséges használatára. Tegyük fel, hogy a katalógusunkat normál HTML-táblázattá kell konvertálnunk. A hagyományos módszerekkel végig kell iterálni a fa összes ágát, és minden kapott elemhez ki kell alakítani a megfelelő címkéket. <TD>…</TD>.</p> <p>Az XSL használatával egyszerűen létrehozunk egy sablont (vagy stíluslapot), amely meghatározza, hogy mit és hogyan kell átalakítani. Ezután ráhelyezzük ezt a sablont a katalógusunkra – és kész: van egy XSL-sablon szövege, amely a katalógust táblázattá alakítja (2. lista).</p> <p>A kód, amely egy XSL-sablont lefed a könyvtárunkban, így néz ki:</p><p>Eljárás TForm1.Button2Click (Feladó: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nulla; vége;</p><p>Az XSL-ről szóló vitánkat befejezve elmondható, hogy jelenleg ezt a nyelvet aktívan használják különféle XML dokumentumok közötti transzformációra, valamint dokumentumok formázására.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Következtetés</h2> <p>Nyilvánvaló okokból lehetetlen egyetlen cikkben lefedni az összes Microsoft XML DOM objektumot, és példákat adni a használatukra. Itt most az XML DOM alkalmazásokban való használatának alapvető kérdéseit érintettük. asztal A 3. ábra a Microsoft XML DOM-ban megvalósított összes objektumot mutatja.</p> <p>ComputerPress 12 "2000</p> <p>Üdvözlök mindenkit! Több éve írok a Matlabon, aztán türelmetlen voltam, hogy programot írjak Delphi-re.</p><p>Meg kell tanulnom az xml dokumentumok kezelését. A RAD Stiduo XE3-nál dolgozom. Van egy TXMLDocument összetevő, valószínűleg sok Delphi programozó ismeri. Úgy tűnik, sok mindenre képes. De az a probléma, hogy nincs rá egyértelmű dokumentáció és leírás. A RAD Studio súgója baromság, mert ott nincs normális információ; csak szétszórva az oldalakon a csekély segítség bizonyos módszerekről és eljárásokról (példák és normál leírás nélkül). Feltúrta az egész internetet. A fórumokon csak konkrét problémákra megoldást kínáló témákat találtam, ahol még egy órán keresztül kell találgatni, hogy mit csinál ez vagy az az xml fájl eléréséhez kapcsolódó sor. <br>Szükségem van egy kézikönyvre is az xml-lel végzett munka során használt fő funkciókról, eljárásokról és módszerekről. Tankönyv, kézikönyv, leírás. Vagy legalábbis "xml in Delphi for dummies". Például:</p><p><i>XML-fájl megnyitásához használja az XMLDocument1.LoadFromFile ("filemane.xml") metódust, ahol a fájlnév a fájl neve. <br>Az IXMLNode típusú változó csomópontlista a gyermeklista tárolására szolgál. Az Xmldocument1.DocumentElement metódus (ahol az XMLDocument1 a vizsgálandó xml fájl) szolgál a lista meghatározásához. <br>Az "element1" gyermekelem tartalmának lekérdezéséhez használja az XMLDocument1.DocumentElement.ChildNodes ["element1"] Szöveg ... metódust. <br></i><br>és ennek szellemében tovább minden alkalmazott módszerről, eljárásról, adattípusról. <br>Hol találok hasonló kézikönyveket/leírásokat? Ki tud segíteni?</p><p>Ha kell konkrét feladat, leírom. <br>Van egy xml-dokumentum a következő űrlappal:</p><p> <br><ltm version="1.0" type="settings" ><br><progname>LTM</progname></p><p><templateFiles><br> <assets>fon.png</assets><br> <assets>fel.jpg</assets><br> <images><br> <pano> <tiles>pano_u.jpg</tiles><br> <tiles>pano_f.jpg</tiles><br> </pano><br> <tour><br> <tourimages>start.jpg</tourimages><br> <tourimages>tmb.jpg</tourimages><br> </tour><br> </images><br></templateFiles><br><dimensions><br> <tiles type="pc">1910</tiles><br> <tiles type="ipad">768</tiles><br> <tiles side="iphone">512</tiles><br> <tourimages name="start.jpg" edge="long">1024</tourimages><br> <tourimages name="start.jpg" edge="short">768</tourimages><br></dimensions></p><p><hotspot name="hs015_2" style="mappoint" scena="scene017" ath="68.17644363437007" /><br><hotspot name="hs015_1" style="mappoint" scena="scene014" rz="4436007" /> <br><data name="onstart" mode="noVoice">Némi szöveg</data><br><data name="onerror" mode="noVoice">Valami hibaszöveg</data><br><data name="onerror" mode="alarm">Egyéb hibaszöveg</data></p><p>A programkódban a következők találhatók:</p><p>var <br>...<br>szülő, gyermek1: IXMLNode;</p><p>kezdődik <br>XMLDocument1.LoadFromFile ("f: \ fájlnév.x ml"); <br>XMLDocument1.Active: = igaz; <br>.<br>.<br>vége</p><p>Amit meg kell tanulnod csinálni: <br>(Előre is elnézést kérek, ha rosszul nevezem meg az xml dokumentum összetevőit) <br>1. Szerezze meg a gyökérelem nevét (esetünkben ltm), valamint attribútumainak listáját (verzió, típus) és értékeiket ("1.0", "beállítások"). <br>2. Adja meg azoknak az elemeknek a számát, amelyek a gyökér gyermekei. Ebben az esetben 7 van belőlük: templateFiles, dimenziók, hotspot, hotspot, adatok, adatok, adatok. Szerezze be az elemek (címkék) nevét (templateFiles, dimenziók stb.). Miután megkaptam az elemek számát, és megtanultam, hogyan kell kivonni a nevüket, 0-ról count-1-re lépek, és megteszem, amit kell. <br>3. Szerezze meg a kívánt elem számát és attribútumainak listáját. Például a hotspot elemhez. A helyes válasz 4 tulajdonság lenne. Az első hotspot elemnél ezek a következők lesznek: name, style, scena, ath. A másodiknál ​​- ugyanaz, csak az ath attribútum helyett - az rz attribútum. <br>Figyelje meg, hogy 2 hotspot elem van a fájlban, különböző attribútumokkal. Így dolgozhat velük (ha 1-nél több azonos nevű elem van)? <br>Így akarok: kapok egy listát a gyerekekről rel. a gyökérhez (lásd 2. oldal), futtasson át rajtuk egy for ciklust, és keressen olyan hotspot elemeket, amelyekben a név paraméter megegyezik a szükséges paraméterrel (mondjuk "hs015_2" - biztosan lesz ilyen elem). Megoldható valahogy ez a probléma hurok nélkül? Vagyis lekéri a scena attribútum értékét a "hs015_2" névvel rendelkező hotspot elemhez? <br>4. Hajtsa végre a fentieket azokra a csomópontokra és elemekre, amelyek gyermekekhez képest gyermekek. Példámban egy csomópont (az és gyermeke és szülője. <br>Ha jól értem, valahogy át kell vinni a csomópont tartalmát ide <a href="https://obanracer.ru/hu/tipy-peremennyh-visual-basic-yazyk-programmirovaniya-visual-basic-tipy-dannyh.html">változó tetszik</a> IXMLNode, és tegye ugyanazt, mint az 1-3. Így?</p><p>5. Meg kell tanulnia a fenti paraméterek megváltoztatását (állítsa be saját magát).</p><p>Eddig úgy tűnik. Ebben a szakaszban számomra a szintaktikai konstrukciók a legfontosabbak. <br>Aki birtokolja ezt a témát, kérem írjon más szintaktikai konstrukciókat a fenti problémák megoldására (attribútumok beszerzése, azok száma, elemszáma, neve stb.). A lényeg most a szintaxis elsajátítása, és később implementálom az algoritmusomat. Előre is nagyon köszönöm!</p><p>P.S. Nagyon nem szeretném a semmiből saját XML-elemzőt írni csak azért, mert a meglévőkre nincs normális leírás.</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>Előző cikk</span><a href="https://obanracer.ru/hu/iz-kakih-otelei-v-yalove-otkryvayutsya-krasivye-vidy-yalova.html">Yalova Törökország: termálforrások, kezelések, szállodák, árak, vélemények Terápiás módszerek és adagolások a termálvíz kezeléséhez</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>Következő cikk</span><a href="https://obanracer.ru/hu/viktoriya-gorod-v-ispanii-otkryt-levoe-menyu-vitoriya-gasteis-ot.html">Nyissa meg a bal oldali menüt Vitoria-Gastais</a></div> <!-- /next_post --> </div> </div> <div class="td-author-name vcard author" style="display: none"><span class="fn"><a href="https://obanracer.ru/hu/author/iulia">Yuliya</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="#">HASONLÓ CIKKEK</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/hu/nikshich-chernogoriya-otdyh-v-nikshiche-kak-naiti-krepost-bedem.html" rel="bookmark" title="Niksic Montenegró. Pihenj Niksicben. Hogyan találjuk meg a Bedem erődöt"><img width="218" height="150" class="entry-thumb" src="/uploads/6f8b80f2da267157648a0fa43baedade.jpg" alt="Niksic Montenegró. Pihenj Niksicben. Hogyan találjuk meg a Bedem erődöt" title="Niksic Montenegró. Pihenj Niksicben. Hogyan találjuk meg a Bedem erődöt"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/windows-7/" class="td-post-category">Windows 7</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/nikshich-chernogoriya-otdyh-v-nikshiche-kak-naiti-krepost-bedem.html" rel="bookmark" title="Niksic Montenegró. Pihenj Niksicben. Hogyan találjuk meg a Bedem erődöt">Niksic Montenegró. Pihenj Niksicben. Hogyan találjuk meg a Bedem erődöt</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/hu/gornolyzhnyi-kurort-san-martino-di-kastrocca-san-martino-di-castrozza.html" rel="bookmark" title="San Martino di Castrozza síközpont"><img width="218" height="150" class="entry-thumb" src="/uploads/654405e3254addfea16438944933e7a7.jpg" alt="San Martino di Castrozza síközpont" title="San Martino di Castrozza síközpont"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/windows-7/" class="td-post-category">Windows 7</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/gornolyzhnyi-kurort-san-martino-di-kastrocca-san-martino-di-castrozza.html" rel="bookmark" title="San Martino di Castrozza síközpont">San Martino di Castrozza síközpont</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/hu/otdyh-v-preshove-luchshie-ceny-na-tury-v-preshov-chto-takoe.html" rel="bookmark" title="Mik azok az analitikai sütik"><img width="218" height="150" class="entry-thumb" src="/uploads/d1d60bb08439ce97aaff05b1878f74ca.jpg" alt="Mik azok az analitikai sütik" title="Mik azok az analitikai sütik"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/internet/" class="td-post-category">Internet</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/otdyh-v-preshove-luchshie-ceny-na-tury-v-preshov-chto-takoe.html" rel="bookmark" title="Mik azok az analitikai sütik">Mik azok az analitikai sütik</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/hu/glavnye-dostoprimechatelnosti-preshova-spisok-foto-i-opisanie-otdyh-v.html" rel="bookmark" title="Ünnepek Eperjesen, a legjobb árak a presov-i túrákhoz. Adatvédelmi beállítások módosítása"><img width="218" height="150" class="entry-thumb" src="/uploads/2c22795d18aaa6ebe9bdbf603da5f102.jpg" alt="Ünnepek Eperjesen, a legjobb árak a presov-i túrákhoz. Adatvédelmi beállítások módosítása" title="Ünnepek Eperjesen, a legjobb árak a presov-i túrákhoz. Adatvédelmi beállítások módosítása"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/ram/" class="td-post-category">RAM</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/glavnye-dostoprimechatelnosti-preshova-spisok-foto-i-opisanie-otdyh-v.html" rel="bookmark" title="Ünnepek Eperjesen, a legjobb árak a presov-i túrákhoz. Adatvédelmi beállítások módosítása">Ünnepek Eperjesen, a legjobb árak a presov-i túrákhoz. Adatvédelmi beállítások módosítása</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/hu/gorod-puate-puate-gorod-cerkvei-i-treh-istoricheskih.html" rel="bookmark" title="Poitiers - a templomok és három történelmi csata városa"><img width="218" height="150" class="entry-thumb" src="/uploads/517057f6b9a3ad0e36026530081a3b33.jpg" alt="Poitiers - a templomok és három történelmi csata városa" title="Poitiers - a templomok és három történelmi csata városa"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/security/" class="td-post-category">Biztonság</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/gorod-puate-puate-gorod-cerkvei-i-treh-istoricheskih.html" rel="bookmark" title="Poitiers - a templomok és három történelmi csata városa">Poitiers - a templomok és három történelmi csata városa</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/hu/buhta-entoni-kuinna-kak-dobratsya-iz-faliraki-plyazh-entoni-kuinna-na-rodose.html" rel="bookmark" title="Anthony quinn strand Rodoszban"><img width="218" height="150" class="entry-thumb" src="/uploads/68fbf2bde508c7cc691cb07e3b0cff70.jpg" alt="Anthony quinn strand Rodoszban" title="Anthony quinn strand Rodoszban"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/windows-7/" class="td-post-category">Windows 7</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/buhta-entoni-kuinna-kak-dobratsya-iz-faliraki-plyazh-entoni-kuinna-na-rodose.html" rel="bookmark" title="Anthony quinn strand Rodoszban">Anthony quinn strand Rodoszban</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/hu/gornolyzhnye-kurorty-finlyandii-yullyas-gornolyzhnyi-kurort-yullyas-izmenenie.html" rel="bookmark" title="Síközpontok Finnországban"><img width="218" height="150" class="entry-thumb" src="/uploads/954d052bab735b7eb98d7ee5505312fa.jpg" alt="Síközpontok Finnországban" title="Síközpontok Finnországban"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/case/" class="td-post-category">Házak</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/gornolyzhnye-kurorty-finlyandii-yullyas-gornolyzhnyi-kurort-yullyas-izmenenie.html" rel="bookmark" title="Síközpontok Finnországban">Síközpontok Finnországban</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/hu/otdyh-v-kolobzhege-polskii-kurort-kolobzheg-planiruem-otdyh-na-more.html" rel="bookmark" title="Lengyel üdülőhely Kolobrzeg: tengerparti nyaralás tervezése külföldön Szórakozás és látnivalók Kolobrzegben"><img width="218" height="150" class="entry-thumb" src="/uploads/9d143832647b929b91d9c817be8fd072.jpg" alt="Lengyel üdülőhely Kolobrzeg: tengerparti nyaralás tervezése külföldön Szórakozás és látnivalók Kolobrzegben" title="Lengyel üdülőhely Kolobrzeg: tengerparti nyaralás tervezése külföldön Szórakozás és látnivalók Kolobrzegben"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/ram/" class="td-post-category">RAM</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/otdyh-v-kolobzhege-polskii-kurort-kolobzheg-planiruem-otdyh-na-more.html" rel="bookmark" title="Lengyel üdülőhely Kolobrzeg: tengerparti nyaralás tervezése külföldön Szórakozás és látnivalók Kolobrzegben">Lengyel üdülőhely Kolobrzeg: tengerparti nyaralás tervezése külföldön Szórakozás és látnivalók Kolobrzegben</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/hu/otdyh-v-argose-argos-odin-iz-samyh-drevnih-gorodov-evropy-chto-takoe.html" rel="bookmark" title="Argos Európa egyik legrégebbi városa Mik azok a marketingsütik"><img width="218" height="150" class="entry-thumb" src="/uploads/fcb72e9fb1089d2bf727aae8a6ca7bb9.jpg" alt="Argos Európa egyik legrégebbi városa Mik azok a marketingsütik" title="Argos Európa egyik legrégebbi városa Mik azok a marketingsütik"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/internet/" class="td-post-category">Internet</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/otdyh-v-argose-argos-odin-iz-samyh-drevnih-gorodov-evropy-chto-takoe.html" rel="bookmark" title="Argos Európa egyik legrégebbi városa Mik azok a marketingsütik">Argos Európa egyik legrégebbi városa Mik azok a marketingsütik</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">Ajánlott</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/hu/boinice-trenchin-gde-normalno-perenochevat-dostoprimechatelnosti-i-interesnye-mesta-trenchina-obzor.html" rel="bookmark" title="Trencsén látnivalói és érdekességei: áttekintés és fényképek"><img width="324" height="235" class="entry-thumb" src="/uploads/8163ad22d531089bc1bac8d0370f1612.jpg" alt="Trencsén látnivalói és érdekességei: áttekintés és fényképek" title="Trencsén látnivalói és érdekességei: áttekintés és fényképek"/ loading=lazy loading=lazy></a></div> <a href="https://obanracer.ru/hu/category/processors/" class="td-post-category">Processzorok</a> </div> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/boinice-trenchin-gde-normalno-perenochevat-dostoprimechatelnosti-i-interesnye-mesta-trenchina-obzor.html" rel="bookmark" title="Trencsén látnivalói és érdekességei: áttekintés és fényképek">Trencsén látnivalói és érdekességei: áttekintés és fényképek</a></h3> <div class="td-module-meta-info"> </div> <div class="td-excerpt">Van egy gyönyörű és érdekes város Szlovákia nyugati részén. Ez a város Trencsén. A közepén egy nagy szikla magasodik, rajta pedig egy kastély áll, amely a ...</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/hu/maribor-gorod-istoriya-komandy-suveniry-chto-privezti-v-podarok.html" rel="bookmark" title="Maribor város. Csapattörténet. Szuvenírek. Mit vigyen ajándékba"><img width="100" height="70" class="entry-thumb" src="/uploads/97716820e5b9d233de553324ca2927cd.jpg" alt="Maribor város. Csapattörténet. Szuvenírek. Mit vigyen ajándékba" title="Maribor város. Csapattörténet. Szuvenírek. Mit vigyen ajándékba"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/maribor-gorod-istoriya-komandy-suveniry-chto-privezti-v-podarok.html" rel="bookmark" title="Maribor város. Csapattörténet. Szuvenírek. Mit vigyen ajándékba">Maribor város. Csapattörténet. Szuvenírek. Mit vigyen ajándékba</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/case/" class="td-post-category">Házak</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/hu/panamskii-kanal-istoriya-i-fakty-kak-eto-bylo-stroitelstvo-panamskogo-kanala.html" rel="bookmark" title="Panama csatorna. Történelem és tények. Milyen volt. A Panama-csatorna építése Megnyitották a Panama-csatornát"><img width="100" height="70" class="entry-thumb" src="/uploads/f10b1c9efd8228ae75d079e927312aba.jpg" alt="Panama csatorna. Történelem és tények. Milyen volt. A Panama-csatorna építése Megnyitották a Panama-csatornát" title="Panama csatorna. Történelem és tények. Milyen volt. A Panama-csatorna építése Megnyitották a Panama-csatornát"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/panamskii-kanal-istoriya-i-fakty-kak-eto-bylo-stroitelstvo-panamskogo-kanala.html" rel="bookmark" title="Panama csatorna. Történelem és tények. Milyen volt. A Panama-csatorna építése Megnyitották a Panama-csatornát">Panama csatorna. Történelem és tények. Milyen volt. A Panama-csatorna építése Megnyitották a Panama-csatornát</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/processors/" class="td-post-category">Processzorok</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/hu/kak-dobratsya-do-telebashni-vostochnaya-zhemchuzhina-shanhai-shanhaiskaya.html" rel="bookmark" title="Sanghaji TV-torony – Keleti gyöngyszem"><img width="100" height="70" class="entry-thumb" src="/uploads/9a69c5e916b45be0515aaa6d77cb18ee.jpg" alt="Sanghaji TV-torony – Keleti gyöngyszem" title="Sanghaji TV-torony – Keleti gyöngyszem"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/kak-dobratsya-do-telebashni-vostochnaya-zhemchuzhina-shanhai-shanhaiskaya.html" rel="bookmark" title="Sanghaji TV-torony – Keleti gyöngyszem">Sanghaji TV-torony – Keleti gyöngyszem</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/processors/" class="td-post-category">Processzorok</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/hu/sozdanie-zaprosov-v-sql-server-zaprosy-v-access-chto-takoe-sql.html" rel="bookmark" title="Lekérdezések készítése SQL szerveren"><img width="100" height="70" class="entry-thumb" src="/uploads/d111825aeecbde2713a46f082828b95f.jpg" alt="Lekérdezések készítése SQL szerveren" title="Lekérdezések készítése SQL szerveren"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/sozdanie-zaprosov-v-sql-server-zaprosy-v-access-chto-takoe-sql.html" rel="bookmark" title="Lekérdezések készítése SQL szerveren">Lekérdezések készítése SQL szerveren</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/processors/" class="td-post-category">Processzorok</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/hu/nansi-na-mozele-nansi-malenkii-gorod-i-ego-bolshaya-istoriya-izmenenie.html" rel="bookmark" title="Nancy - egy kis város és nagy története"><img width="100" height="70" class="entry-thumb" src="/uploads/edeb27e1576154949e29a9f4c7880c72.jpg" alt="Nancy - egy kis város és nagy története" title="Nancy - egy kis város és nagy története"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/nansi-na-mozele-nansi-malenkii-gorod-i-ego-bolshaya-istoriya-izmenenie.html" rel="bookmark" title="Nancy - egy kis város és nagy története">Nancy - egy kis város és nagy története</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/monitors/" class="td-post-category">Monitorok</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/hu/ispaniya-logrono-logrono-ispaniya-gorod-logrono-ispaniya.html" rel="bookmark" title="Logroño - Spanyolország Logroño város Spanyolország"><img width="100" height="70" class="entry-thumb" src="/uploads/5d79179abb99838b224f2fa4d4d1484c.jpg" alt="Logroño - Spanyolország Logroño város Spanyolország" title="Logroño - Spanyolország Logroño város Spanyolország"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://obanracer.ru/hu/ispaniya-logrono-logrono-ispaniya-gorod-logrono-ispaniya.html" rel="bookmark" title="Logroño - Spanyolország Logroño város Spanyolország">Logroño - Spanyolország Logroño város Spanyolország</a></h3> <div class="td-module-meta-info"> <a href="https://obanracer.ru/hu/category/power-supply/" class="td-post-category">Áramforrás</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/hu/logrono-ispaniya-dostoprimechatelnosti-puteshestvie-v-ispaniyu.html" rel="bookmark" title="Utazás Spanyolországba: Logroño és Pamplona"><img width="218" height="150" class="entry-thumb" src="/uploads/611671e969afc1cee957c290902767d9.jpg" alt="Utazás Spanyolországba: Logroño és Pamplona" title="Utazás Spanyolországba: Logroño és Pamplona"/ 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/hu/logrono-ispaniya-dostoprimechatelnosti-puteshestvie-v-ispaniyu.html" rel="bookmark" title="Utazás Spanyolországba: Logroño és Pamplona">Utazás Spanyolországba: Logroño és Pamplona</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/hu/stoimost-zameny-stekla-na-ipad-stoimost-zameny-stekla-na-ipad-skolko-budet.html" rel="bookmark" title="Üvegcsere költsége iPaden Mennyibe kerül az üvegcsere iPaden"><img width="218" height="150" class="entry-thumb" src="/uploads/544e972575b6c37affc92be535482fa3.jpg" alt="Üvegcsere költsége iPaden Mennyibe kerül az üvegcsere iPaden" title="Üvegcsere költsége iPaden Mennyibe kerül az üvegcsere iPaden"/ 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/hu/stoimost-zameny-stekla-na-ipad-stoimost-zameny-stekla-na-ipad-skolko-budet.html" rel="bookmark" title="Üvegcsere költsége iPaden Mennyibe kerül az üvegcsere iPaden">Üvegcsere költsége iPaden Mennyibe kerül az üvegcsere iPaden</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/hu/garantiya-makbuk-oficialnaya-garantiya-apple-v-rossii-kakie-usloviya-i-kak.html" rel="bookmark" title="Az Apple hivatalos garancia Oroszországban: milyen feltételekkel és hogyan ellenőrizhető"><img width="218" height="150" class="entry-thumb" src="/uploads/d5753cc8af22f6b2c0f2251cf18b2fcd.jpg" alt="Az Apple hivatalos garancia Oroszországban: milyen feltételekkel és hogyan ellenőrizhető" title="Az Apple hivatalos garancia Oroszországban: milyen feltételekkel és hogyan ellenőrizhető"/ 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/hu/garantiya-makbuk-oficialnaya-garantiya-apple-v-rossii-kakie-usloviya-i-kak.html" rel="bookmark" title="Az Apple hivatalos garancia Oroszországban: milyen feltételekkel és hogyan ellenőrizhető">Az Apple hivatalos garancia Oroszországban: milyen feltételekkel és hogyan ellenőrizhető</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/hu/ne-rabotaet-naushnik-iphone-chto-delat-preimushchestva-obrashcheniya-v-modmac.html" rel="bookmark" title="Az iPhone fülhallgató nem működik"><img width="218" height="150" class="entry-thumb" src="/uploads/cabc28bd3982c64f0b66bc197f9f8930.jpg" alt="Az iPhone fülhallgató nem működik" title="Az iPhone fülhallgató nem működik"/ 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/hu/ne-rabotaet-naushnik-iphone-chto-delat-preimushchestva-obrashcheniya-v-modmac.html" rel="bookmark" title="Az iPhone fülhallgató nem működik">Az iPhone fülhallgató nem működik</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/hu/reshenie-problemy-s-mercayushchei-podsvetkoi-na-imac-net-podsvetki-ne-rabotaet.html" rel="bookmark" title="A villogó háttérvilágítással kapcsolatos probléma megoldása az iMac számítógépen"><img width="218" height="150" class="entry-thumb" src="/uploads/d4ec850254dc94d89dfc2c82cffeb46e.jpg" alt="A villogó háttérvilágítással kapcsolatos probléma megoldása az iMac számítógépen" title="A villogó háttérvilágítással kapcsolatos probléma megoldása az iMac számítógépen"/ 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/hu/reshenie-problemy-s-mercayushchei-podsvetkoi-na-imac-net-podsvetki-ne-rabotaet.html" rel="bookmark" title="A villogó háttérvilágítással kapcsolatos probléma megoldása az iMac számítógépen">A villogó háttérvilágítással kapcsolatos probléma megoldása az iMac számítógépen</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/hu/zamena-stekla-na-ipad-pro-chto-nuzhno-znat-instrumenty-i.html" rel="bookmark" title="Üvegcsere az iPad Pro készüléken"><img width="218" height="150" class="entry-thumb" src="/uploads/e5bae0c6a249ac0c8d49868dfff1b14e.jpg" alt="Üvegcsere az iPad Pro készüléken" title="Üvegcsere az iPad Pro készüléken"/ 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/hu/zamena-stekla-na-ipad-pro-chto-nuzhno-znat-instrumenty-i.html" rel="bookmark" title="Üvegcsere az iPad Pro készüléken">Üvegcsere az iPad Pro készüléken</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/hu/na-makbuke-ne-rabotaet-zvuk-neispravnye-dinamiki-ili-zvukovoi.html" rel="bookmark" title="Hibás hangszóró vagy hangchip"><img width="218" height="150" class="entry-thumb" src="/uploads/ad5f96707940e9f184a61371202f79ae.jpg" alt="Hibás hangszóró vagy hangchip" title="Hibás hangszóró vagy hangchip"/ 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/hu/na-makbuke-ne-rabotaet-zvuk-neispravnye-dinamiki-ili-zvukovoi.html" rel="bookmark" title="Hibás hangszóró vagy hangchip">Hibás hangszóró vagy hangchip</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/hu/kak-izmenit-informaciyu-o-kompyutere-mac-os-kak-izmenit-dannye.html" rel="bookmark" title="Hogyan módosíthatja a hardveradatokat az „A Macről” részben bármely másra"><img width="218" height="150" class="entry-thumb" src="/uploads/665819b549c2a30d8142138f773fc066.jpg" alt="Hogyan módosíthatja a hardveradatokat az „A Macről” részben bármely másra" title="Hogyan módosíthatja a hardveradatokat az „A Macről” részben bármely másra"/ 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/hu/kak-izmenit-informaciyu-o-kompyutere-mac-os-kak-izmenit-dannye.html" rel="bookmark" title="Hogyan módosíthatja a hardveradatokat az „A Macről” részben bármely másra">Hogyan módosíthatja a hardveradatokat az „A Macről” részben bármely másra</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/hu/imac-ne-vklyuchaetsya-belyi-ekran-ne-zagruzhaetsya-macbook-chto-delat.html" rel="bookmark" title="A MacBook nem indul el: mi a teendő"><img width="218" height="150" class="entry-thumb" src="/uploads/03274cad0d413ed979a2f92c00deb66d.jpg" alt="A MacBook nem indul el: mi a teendő" title="A MacBook nem indul el: mi a teendő"/ 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/hu/imac-ne-vklyuchaetsya-belyi-ekran-ne-zagruzhaetsya-macbook-chto-delat.html" rel="bookmark" title="A MacBook nem indul el: mi a teendő">A MacBook nem indul el: mi a teendő</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/hu/aifon-ne-ishchet-set-chto-delat-net-seti-poisk-ili-pochemu-iphone-ne.html" rel="bookmark" title="Nincs hálózat, nincs keresés, vagy miért nem látja az iPhone a szolgáltató SIM-kártyáját"><img width="218" height="150" class="entry-thumb" src="/uploads/24bc2d64ff01f453624f1f90639774e8.jpg" alt="Nincs hálózat, nincs keresés, vagy miért nem látja az iPhone a szolgáltató SIM-kártyáját" title="Nincs hálózat, nincs keresés, vagy miért nem látja az iPhone a szolgáltató SIM-kártyájá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/hu/aifon-ne-ishchet-set-chto-delat-net-seti-poisk-ili-pochemu-iphone-ne.html" rel="bookmark" title="Nincs hálózat, nincs keresés, vagy miért nem látja az iPhone a szolgáltató SIM-kártyáját">Nincs hálózat, nincs keresés, vagy miért nem látja az iPhone a szolgáltató SIM-kártyájá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/hu/kak-zamenit-zhestkii-disk-na-makbuke-pro-ustanovka-ssd-i-vtorogo-hdd.html" rel="bookmark" title="SSD és egy második HDD telepítése"><img width="218" height="150" class="entry-thumb" src="/uploads/e039ca358bd7d54d5d5c1ee340b39c06.jpg" alt="SSD és egy második HDD telepítése" title="SSD és egy második HDD telepítése"/ 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/hu/kak-zamenit-zhestkii-disk-na-makbuke-pro-ustanovka-ssd-i-vtorogo-hdd.html" rel="bookmark" title="SSD és egy második HDD telepítése">SSD és egy második HDD telepítése</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/hu/apple-watch-ne-vklyuchaetsya-ne-vklyuchayutsya-apple-watch-chto-delat-nekotorye.html" rel="bookmark" title="Az Apple Watch nem kapcsol be, mit tegyek?"><img width="218" height="150" class="entry-thumb" src="/uploads/c6f7694305a1028eeba24f58a0b38d82.jpg" alt="Az Apple Watch nem kapcsol be, mit tegyek?" title="Az Apple Watch nem kapcsol be, mit tegyek?"/ 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/hu/apple-watch-ne-vklyuchaetsya-ne-vklyuchayutsya-apple-watch-chto-delat-nekotorye.html" rel="bookmark" title="Az Apple Watch nem kapcsol be, mit tegyek?">Az Apple Watch nem kapcsol be, mit tegyek?</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/hu/kak-otvyazat-apple-watch-ot-icloud-kak-pravilno-otvyazat-iwatch-ot-apple-id-i-icloud.html" rel="bookmark" title="Hogyan lehet megfelelően leválasztani az iWatch-ot az Apple ID-ről és az iCloudról?"><img width="218" height="150" class="entry-thumb" src="/uploads/14e56ba6f791d902aad19bf4a5f020fb.jpg" alt="Hogyan lehet megfelelően leválasztani az iWatch-ot az Apple ID-ről és az iCloudról?" title="Hogyan lehet megfelelően leválasztani az iWatch-ot az Apple ID-ről és az iCloudról?"/ 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/hu/kak-otvyazat-apple-watch-ot-icloud-kak-pravilno-otvyazat-iwatch-ot-apple-id-i-icloud.html" rel="bookmark" title="Hogyan lehet megfelelően leválasztani az iWatch-ot az Apple ID-ről és az iCloudról?">Hogyan lehet megfelelően leválasztani az iWatch-ot az Apple ID-ről és az iCloudról?</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/hu/pridavili-planshet-vnutri-polosy-chto-delat-esli-na-displee.html" rel="bookmark" title="Mi a teendő, ha csíkok vagy hullámok jelennek meg a táblagép kijelzőjén?"><img width="218" height="150" class="entry-thumb" src="/uploads/e98bea800fbff9ac4e31eb2f1ae6536a.jpg" alt="Mi a teendő, ha csíkok vagy hullámok jelennek meg a táblagép kijelzőjén?" title="Mi a teendő, ha csíkok vagy hullámok jelennek meg a táblagép kijelzőjén?"/ 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/hu/pridavili-planshet-vnutri-polosy-chto-delat-esli-na-displee.html" rel="bookmark" title="Mi a teendő, ha csíkok vagy hullámok jelennek meg a táblagép kijelzőjén?">Mi a teendő, ha csíkok vagy hullámok jelennek meg a táblagép kijelzőjén?</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/hu/otlozhennyi-start-v-multivarke-kasha-v-multivarke-otlozhennyi-start.html" rel="bookmark" title="Kása lassú tűzhelyben (késleltetett indítás)"><img width="218" height="150" class="entry-thumb" src="/uploads/a4ab07364952cfca9d36383d89806556.jpg" alt="Kása lassú tűzhelyben (késleltetett indítás)" title="Kása lassú tűzhelyben (késleltetett indítás)"/ 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/hu/otlozhennyi-start-v-multivarke-kasha-v-multivarke-otlozhennyi-start.html" rel="bookmark" title="Kása lassú tűzhelyben (késleltetett indítás)">Kása lassú tűzhelyben (késleltetett indítás)</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/hu/deshifrovat-fail-vashi-faily-byli-zashifrovany-chto-delat.html" rel="bookmark" title="A fájlokat titkosították – mi a teendő?"><img width="218" height="150" class="entry-thumb" src="/uploads/bffae52de3b7456d856b6c28691928f8.jpg" alt="A fájlokat titkosították – mi a teendő?" title="A fájlokat titkosították – mi a teendő?"/ 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/hu/deshifrovat-fail-vashi-faily-byli-zashifrovany-chto-delat.html" rel="bookmark" title="A fájlokat titkosították – mi a teendő?">A fájlokat titkosították – mi a teendő?</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/hu/kak-ubrat-nadpis-ob-aktivacii-cherez-reestr-avtomaticheskaya.html" rel="bookmark" title="Automatikus ablakaktiválás lebegtetéskor a Windows rendszerben Tiltsa le az értesítéseket a paraméterbeállítások módosításával"><img width="218" height="150" class="entry-thumb" src="/uploads/2af8a44cb6567ba500dbeb10d87a5a6c.jpg" alt="Automatikus ablakaktiválás lebegtetéskor a Windows rendszerben Tiltsa le az értesítéseket a paraméterbeállítások módosításával" title="Automatikus ablakaktiválás lebegtetéskor a Windows rendszerben Tiltsa le az értesítéseket a paraméterbeállítások módosításával"/ 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/hu/kak-ubrat-nadpis-ob-aktivacii-cherez-reestr-avtomaticheskaya.html" rel="bookmark" title="Automatikus ablakaktiválás lebegtetéskor a Windows rendszerben Tiltsa le az értesítéseket a paraméterbeállítások módosításával">Automatikus ablakaktiválás lebegtetéskor a Windows rendszerben Tiltsa le az értesítéseket a paraméterbeállítások módosításával</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/hu/sozdanie-brauzera-dlya-android-kak-izmenit-brauzer-po-umolchaniyu-v.html" rel="bookmark" title="Az alapértelmezett böngésző megváltoztatása Androidon"><img width="218" height="150" class="entry-thumb" src="/uploads/ddd2ab8adb97963ee60e95a215a4df0e.jpg" alt="Az alapértelmezett böngésző megváltoztatása Androidon" title="Az alapértelmezett böngésző megváltoztatása Androidon"/ 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/hu/sozdanie-brauzera-dlya-android-kak-izmenit-brauzer-po-umolchaniyu-v.html" rel="bookmark" title="Az alapértelmezett böngésző megváltoztatása Androidon">Az alapértelmezett böngésző megváltoztatása Androidon</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside> </div> </div> </div> </div> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span td-sub-footer-menu"> </div> <div class="td-pb-span td-sub-footer-copy">Copyright 2021 – Számítógépek és laptopok javítása. Videokártyák, merevlemezek, internet, monitorok.</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>