U mnohých programátorov Delphi je ukladanie nastavení spojené s používaním INI súbory vo svojich programoch. Je potrebné sa vyhnúť používaniu tejto metódy vo viac či menej závažných projektoch, pretože obmedzuje flexibilitu, čo bráni ďalšiemu rozširovaniu programu. Malo by sa povedať, že tento prístup je pomerne populárny vďaka jednoduchému použitiu a prítomnosti vstavaných nástrojov vo vývojovom prostredí.
Avšak štruktúrovaný XML súbory. Ich výhodou je, že počet parametrov nemusí byť pevne daný. Aby ste to lepšie pochopili, zvážte konkrétny príklad.
V programe USearch sa po kliknutí na záznam zobrazí kontextové menu, v ktorom sa zobrazí zoznam položiek. Tieto položky sú príkazy, ktoré sa načítavajú zo súboru nastavení. V prípade, že boli nastavenia uložené v INI súbor, potom by program mohol uložiť a načítať určitý počet príkazov, napríklad 10 alebo 50. Akonáhle bude potrebná väčšia hodnota, budete musieť prepísať kód a podľa toho ho znova skompilovať.
Aplikácia prístupu pomocou XML súbory, budeme môcť dynamicky načítať všetky parametre sekcie. Okrem toho sa konfiguračný súbor stane elegantnejším, bez nadbytočného číslovania parametrov. Ale, štandardné prostriedky pracovať s XML Delphi má veľa nevýhod, preto odporúčam používať štandardná knižnica MSXML... Zvyčajne je štandardne zahrnutý v operačné systémy Rodina Windows.
Spojiť MSXML, potrebujeme vytvoriť súbor rozhrania so zoznamom všetkých funkcií importovaním zo servera COM. O tom, ako importovať rozhranie, bolo napísaných veľa podrobných článkov, ale odporúčam vám stiahnuť si súbor MSXML2_TLB.PAS pripravený k použitiu. Po stiahnutí súboru ho umiestnite vedľa svojho projektu alebo ho presuňte do priečinka lib prostredia Delphi. Modul teda budú môcť využívať všetky vytvorené programy MSXML, stačí k použitiam pridať riadok MSXML2_TLB.
Kvôli prehľadnosti zvážte nasledujúci príklad použitia tejto knižnice:
Procedúra LoadData; var XMLDoc: DOMDocument; Koreň: IXMLDOMElement; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Koreň: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("veľkosť / šírka"). Text); Koreň: = nula; XMLDoc: = nula; koniec;
Najprv sa vytvorí inštancia triedy DOMDocument a následne sa do pamäte nahrá obsah súboru settings.xml. Keďže podľa normy akékoľvek XML súbor musí obsahovať koreňovú značku (in tento prípad config), potom ho musíme získať pomocou funkcie DocumentElement... Potom sa obsah zobrazí medzi značkami.
Tu sa aplikuje metóda SelectSingleNode, ktorá berie ako parameter reťazec
Napriek tomu, že téma práce s XML v Delphi je na internete veľmi diskutovaná, na všemožných fórach často vznikajú otázky na túto tému.
Už som písal, ale rád by som sa vrátil k skutočnému prípadu rýchlej analýzy súboru XML a extrahovania údajov, ktorý som dnes urobil v práci. Získanie potrebných údajov mi netrvalo dlhšie ako 5 minút.
Pozadie. Dnes som potreboval spracovať údaje o nainštalované programy na počítačoch používateľov (áno, áno, identifikujeme pirátov :)). Technické oddelenie mi poskytlo tieto informácie získané od nič netušiacich používateľov cez sieť pomocou WMI. Program, ktorý použili, generuje správy XML formát... V súlade s tým mi priniesli kopec XML súborov s pomerne zložitou štruktúrou, z ktorej som musel vytiahnuť iba názov nainštalovaných softvérových produktov. Liečba . Po ručnom prezretí niekoľkých súborov som si uvedomil, že starnutie nebude trvať dlho, a rozhodol som sa napísať malý konvertor. Po spustení Delphi som z úložiska vybral objekt XML DataBinding a vložil som doň jeden zo súborov. Všetky nastavenia a parametre som nechal štandardne a v dôsledku toho modul s veľké množstvo triedy a rozhrania na prístup k prvkom tohto súboru XML. Dlho som sa neobťažoval zaoberať sa štruktúrou tried, hneď som prešiel k písaniu prevodníka. V novej konzolovej aplikácii som napísal celkom jednoduchý kód:
program XML2TXT;
používa
formuláre,
Triedy, SysUtils,
SoftwareXML v "SoftwareXML.pas";
postup CovertXML2Text;
var
softvérová základňa: IXMLSTDSoftwareType;
i: celé číslo;
sr: TSearchRec;
CurDir: reťazec;
ExportFile: TStringList;
začať
CurDir: = IncludeTrailingPathDelimiter (ExtractFilePath (Application.ExeName));
ak FindFirst (CurDir + "*. xml", faAnyFile, sr) = 0, potom
opakovať
ExportFile: = TStringList.Create;
softbase: = LoadSTDSoftware (Pchar (CurDir + sr.Name));
for i: = 0 to softbase.InstalledSoftware.source.software.Count - 1 do
ExportFile.Add (softbase.InstalledSoftware.source.software [i] .DisplayName);
ExportFile.Sort;
ExportFile.SaveToFile (CurDir + softbase.InstalledSoftware.Source.servername + ". Txt");
ExportFile.Free;
kým FindNext (sr) 0;
koniec;
začať
Aplikácia.Inicializácia;
CovertXML2Text;
koniec.
Výsledkom bolo, že som pre každý počítač v mriežke dostal jeden textový editor, ktorý obsahuje zoznam nainštalovaného softvéru.
Mám pocit, že tento kód bude vyžadovať nejaké vysvetlenie. Prečo som napríklad použil modul Formuláre v konzolovej aplikácii a zavolal procedúru Application.Initialize;?
Je to vlastne jednoduché – ide o malý hack, ktorý vám umožňuje používať XML Data Binding v konzolovej aplikácii. Pretože tvrdošijne odmietala inicializovať triedu na prácu s XML. Zatiaľ som neprišiel na skutočné dôvody – dnes bol dôležitý čas, bojom s touto chybou som už strávil 4 z 5 minút. :) Myslím, že neskôr sa týmto problémom zaoberať a napísať, čo je skutočný dôvod.
Podivná trieda softbase bola vytvorená zo súboru XML - to je názov koreňového prvku a softbase.InstalledSoftware.source.software [i] .DisplayName je len navigácia cez vnorené prvky k požadovanému prvku a získanie jeho hodnoty.
Takto jeden z najviac rýchle spôsoby prácu s XML v Delphi.
XML sa čoraz viac používa na ukladanie informácií a ich výmenu medzi aplikáciami a webovými stránkami. Mnoho aplikácií používa tento jazyk ako základný jazyk na ukladanie údajov, zatiaľ čo iné ho používajú na export a import údajov XML. Je teda čas, aby sa vývojári zamysleli nad tým, ako môžu byť údaje XML použité v ich vlastných aplikáciách.
V tomto článku sa pozrieme na XML Document Object Model (DOM) a implementáciu XML DOM od spoločnosti Microsoft.
XML DOM je objektový model, ktorý poskytuje vývojárom objekty na načítanie a spracovanie súborov XML. Objektový model pozostáva z nasledujúcich základných objektov: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap a XMLDOMParseError. Každý z týchto objektov (okrem XMLDOMParseError) obsahuje vlastnosti a metódy, ktoré vám umožňujú získať informácie o objekte, manipulovať s hodnotami a štruktúrou objektu a navigovať v štruktúre dokumentu XML.
Pozrime sa na hlavné objekty XML DOM a ukážeme si niekoľko príkladov ich použitia v Borland Delphi.
Použitie XML DOM v Borland Delphi
Aby ste mohli používať Microsoft XML DOM v aplikáciách Delphi, musíte k projektu pripojiť príslušnú knižnicu typov. Za týmto účelom spustíme príkaz Projekt | Importovať knižnicu typov a v dialógovom okne Importovať knižnicu typov vyberte knižnicu Microsoft XML verzie 2.0 (verzia 2.0), ktorá sa zvyčajne nachádza v súbore Windows \ System \ MSXML.DLL.
Po kliknutí na tlačidlo Create Unit sa vytvorí modul rozhrania MSXML_TLB, ktorý nám umožní využívať XML DOM objekty: DOMDocument, XMLDocument, XMLHTTPRequest a množstvo ďalších, implementovaných v knižnici MSXML.DLL. Odkaz na modul MSXML_TLB musí byť v zozname Použitie.
XML DOM zariadenie
Objektový model dokumentu predstavuje XML dokument v stromovej štruktúre vetiev. XML DOM API umožňujú aplikáciám prechádzať stromom dokumentov a manipulovať s jeho vetvami. Každá vetva môže mať špecifický typ (DOMNodeType), podľa ktorého sa určuje nadradená a dcérska vetva. Väčšina dokumentov XML obsahuje vetvy typu element, atribút a text. Atribúty sú špeciálnym druhom vetvy a nie sú podriadenými vetvami. Ak chcete spravovať atribúty, použite špeciálne metódy poskytované objektmi XML DOM.
Okrem implementácie rozhraní odporúčaných konzorciom World Wide Web Consortium (W3C), Microsoft XML DOM obsahuje metódy, ktoré podporujú XSL, XSL vzory, priestory názvov a dátové typy. Napríklad metóda SelectNodes vám umožňuje použiť syntax vzoru XSL na nájdenie vetiev v špecifickom kontexte a metóda TransformNode podporuje použitie XSL na vykonávanie transformácií.
Test XML dokumentu
Ako príklad dokumentu XML si vezmime adresár hudobného disku CD-ROM, ktorý má nasledujúcu štruktúru:
Teraz sme pripravení začať skúmať objektový model XML DOM, počnúc objektom XMLDOMDocument.
Dokument XML - Objekt XMLDOMDocument
Práca s dokumentom XML začína jeho načítaním. Používame na to metódu Load, ktorá má len jeden parameter, ktorý určuje URL načítaného dokumentu. Pri načítavaní súborov z lokálneho disku sa zadáva iba úplný názov súboru (súbor: /// protokol možno v tomto prípade vynechať). Ak je dokument XML uložený ako reťazec, na načítanie dokumentu použite metódu LoadXML.
Vlastnosť Async sa používa na ovládanie spôsobu načítania dokumentu (synchrónne alebo asynchrónne). V predvolenom nastavení je táto vlastnosť nastavená na hodnotu True, čo znamená, že dokument sa načíta asynchrónne a riadenie sa vráti do aplikácie pred úplným načítaním dokumentu. V opačnom prípade sa dokument načíta synchrónne a potom musíte skontrolovať hodnotu vlastnosti ReadyState, aby ste zistili, či sa dokument načítal alebo nie. Môžete tiež vytvoriť obsluhu udalosti pre udalosť OnReadyStateChange, ktorá prevezme kontrolu, keď sa zmení hodnota vlastnosti ReadyState.
Nasledujúci text ukazuje, ako načítať dokument XML pomocou metódy Load:
Používa ... MSXML_TLB ... procedure TForm1.Button1Click (Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // // Tu je kód, ktorý manipuluje // s XML dokumentom a jeho vetvami // XMLDoc: = Nil; koniec;
Po načítaní dokumentu máme prístup k jeho vlastnostiam. Takže vlastnosť NodeName bude obsahovať hodnotu #document, vlastnosť NodeTypeString bude obsahovať hodnotu dokumentu a vlastnosť URL bude obsahovať súbor: /// C: /DATA/DATA.xml value.
Spracovanie chýb
Obzvlášť zaujímavé sú vlastnosti súvisiace so spracovaním dokumentov pri načítaní. Napríklad vlastnosť ParseError vracia objekt XMLDOMParseError obsahujúci informácie o chybe, ktorá sa vyskytla počas spracovania dokumentu.
Ak chcete napísať obslužný program chýb, môžete pridať nasledujúci kód:
Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); XMLError: = XMLDoc.ParseError; Ak XMLError.ErrorCode<>0 Potom // // Tu riešime chybu // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = nula;
Ak chcete zistiť, aké informácie sa vrátia v prípade chyby, zmeňte nasledujúcu položku v adresári:
odstránenie uzatváracieho prvku
Teraz napíšme nejaký kód, ktorý vráti hodnoty vlastností objektu XMLDOMParseError:
XMLError: = XMLDoc.ParseError; Ak XMLError.ErrorCode<>0 Potom s chybou XMLError, Memo1.Lines začne Add (‚Súbor:‘ + URL); Pridať (‚Kód:‘ + IntToStr (Kód chyby)); Pridať („Chyba:“ + Dôvod); Pridať (‚Text:‘ + SrcText); Pridať („Riadok:“ + IntToStr (Riadok)); Pridať (‚Pozícia:‘ + IntToStr (LinePos)); end Else Memo1.Lines.Add (XMLDoc.XML); Koniec;
a spustite našu aplikáciu. V dôsledku toho získame nasledujúce informácie o chybe.
Ako môžete vidieť z vyššie uvedeného príkladu, informácie vrátené objektom XMLDOMParseError sú dostatočné na lokalizáciu chyby a pochopenie príčiny jej výskytu.
Teraz obnovíme uzatvárací prvok
Prístup k stromu dokumentov
Ak chcete získať prístup k stromu dokumentov, môžete buď získať koreňový prvok a potom iterovať jeho dcérske vetvy, alebo nájsť konkrétnu vetvu. V prvom prípade dostaneme koreňový element cez vlastnosť DocumentElement, ktorá vráti objekt typu XMLDOMNode. Tu je návod, ako použiť vlastnosť DocumentElement na získanie obsahu každého podradeného prvku:
Var Node: IXMLDOMNode; Koreň: IXMLDOMElement; I: celé číslo; ... Koreň: = XMLDoc.DocumentElement; Pre I: = 0 do Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Node.Text); Koniec;
Pre náš XML dokument dostaneme nasledujúci text.
Ak nás zaujíma konkrétna vetva alebo vetva pod prvou dcérskou vetvou, môžeme použiť buď metódu NodeFromID alebo metódu GetElementByTagName objektu XMLDOMDocument.
Metóda NodeFromID vyžaduje jedinečný identifikátor definovaný v schéme XML alebo definícii typu dokumentu (DTD) a vracia vetvu s týmto identifikátorom.
Metóda GetElementByTagName vyžaduje reťazec so špecifickým prvkom (značkou) a vracia všetky vetvy s týmto prvkom. Tu je návod, ako použiť túto metódu na nájdenie všetkých umelcov v našom adresári CD-ROM:
Uzly: IXMLDOMNodeList; Uzol: IXMLDOMNode; ... Uzly: = XMLDoc.GetElementsByTagName („ARTIST“); Pre I: = 0 až Nodes.Length-1 do Begin Node: = Nodes.Item [I]; Memo1.Lines.Add (Node.Text); Koniec;
Pre náš XML dokument dostaneme nasledujúci text
Všimnite si, že metóda SelectNodes objektu XMLDOMNode poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Ale o tom viac nižšie.
Vetva dokumentu - Objekt XMLDOMNode
Objekt XMLDOMNode predstavuje vetvu dokumentu. S týmto objektom sme sa už stretli, keď sme dostali koreňový prvok dokumentu:
Koreň: = XMLDoc.DocumentElement;
Ak chcete získať informácie o vetve dokumentu XML, môžete použiť vlastnosti objektu XMLDOMNode (tabuľka 1).
Na prístup k údajom uloženým vo vetve je bežné použiť buď vlastnosť NodeValue (dostupná pre atribúty, textové vetvy, komentáre, pokyny na spracovanie a sekcie CDATA), alebo vlastnosť Text, ktorá vráti textový obsah vetvy, resp. vlastnosť NodeTypedValue. Ten však možno použiť len pre pobočky s napísanými položkami.
Navigácia v strome dokumentov
Objekt XMLDOMNode poskytuje mnoho spôsobov navigácie v strome dokumentov. Napríklad na prístup k nadradenej vetve použite vlastnosť ParentNode (typ XMLDOMNode), pristupujte k podriadeným vetvám prostredníctvom vlastností ChildNodes (typ XMLDOMNodeList), FirstChild a LastChild (typ XMLDOMNode) atď. Vlastnosť OwnerDocument vracia objekt XMLDOMDocument, ktorý identifikuje samotný dokument XML. Vlastnosti uvedené vyššie uľahčujú navigáciu v strome dokumentov.
Teraz si prejdeme všetky vetvy dokumentu XML:
Koreň: = XMLDoc.DocumentElement; Pre I: = 0 do Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Node, 0); Koniec;
Ako je uvedené vyššie, SelectNodes objektu XMLDOMNode poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Okrem toho existuje metóda SelectSingleNode, ktorá vracia iba prvú vetvu dokumentu. Obe tieto metódy vám umožňujú definovať šablóny XSL pre vyhľadávanie pobočiek.
Pozrime sa na proces použitia metódy SelectNodes na načítanie všetkých vetiev, ktoré majú vetvu CD a podvetvu PRICE:
Koreň: = XMLDoc.DocumentElement; Uzly: = Root.SelectNodes (‚CD / CENA‘);
Všetky PRICE podvetvy vetvy CD budú umiestnené v kolekcii Nodes. K diskusii o šablónach XSL sa vrátime o niečo neskôr.
Manipulácia s detskými ratolesťami
Na manipuláciu s podriadenými vetvami môžeme použiť metódy objektu XMLDOMNode (tabuľka 2).
Ak chcete úplne odstrániť záznam o prvom disku, musíte spustiť nasledujúci kód:
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získanie koreňového prvku Root: = XMLDoc.DocumentElement; Uzol: = Koreň; // Odstránenie prvej dcérskej vetvy Node.RemoveChild (Node.FirstChild);
Všimnite si, že v tomto príklade odstraňujeme prvú dcérsku vetvu. Ako odstrániť prvý prvok prvej dcérskej vetvy je znázornené nižšie:
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získanie koreňového prvku Root: = XMLDoc.DocumentElement; // a prvá dcérska vetva Node: = Root.FirstChild; // Odstránenie prvej dcérskej vetvy Node.RemoveChild (Node.FirstChild);
Vo vyššie uvedenom príklade sme neodstránili prvú vetvu
Teraz pridajte novú vetvu. Nižšie je uvedený kód, ktorý ukazuje, ako pridať nový hudobný disk CD-ROM:
Var NewNode: IXMLDOMNode; Dieťa: IXMLDOMNode; ... // Vytvorenie novej pobočky -
Vyššie uvedený kód zobrazuje nasledujúce kroky na pridanie novej pobočky:
- Vytvorenie novej vetvy pomocou metódy CreateNode:
- vytvorenie prvku pomocou metódy CreateNode;
- pridanie prvku do vetvy pomocou metódy AppendChild;
- nastavenie hodnoty prvku prostredníctvom vlastnosti Text;
- … Opakujte pre všetky prvky.
- Pridanie novej vetvy do dokumentu pomocou metódy AppendChild.
Pripomeňme, že metóda AppendChild pridáva vetvu na koniec stromu. Ak chcete pridať vetvu na konkrétne miesto v strome, musíte použiť metódu InsertBefore.
Množina vetiev - objekt XMLDOMNodeList
Objekt XMLNodeList obsahuje zoznam vetiev, ktoré možno zostaviť pomocou metód SelectNodes alebo GetElementsByTagName a tiež získať z vlastnosti ChildNodes.
O použití tohto objektu sme už hovorili v príklade uvedenom v časti „Navigácia v strome dokumentov“. Tu je niekoľko teoretických komentárov.
Počet vetiev v zozname je možné získať ako hodnotu vlastnosti Dĺžka. Vetvy sú indexované od 0 do Dĺžka-1 a každá jednotlivá vetva je prístupná prostredníctvom zodpovedajúcej indexovanej položky v poli Item.
Navigáciu v zozname pobočiek je možné vykonať aj pomocou metódy NextNode, ktorá vráti ďalšiu vetvu v zozname alebo Nil, ak je aktuálna vetva posledná. Ak sa chcete vrátiť na začiatok zoznamu, zavolajte metódu Reset.
Vytvárajte a ukladajte dokumenty
Popísali sme teda, ako môžete pridať vetvy a prvky do existujúcich dokumentov XML. Teraz vytvoríme dokument XML za behu. V prvom rade nezabudnite, že dokument je možné načítať nielen z adresy URL, ale aj z bežného reťazca. Tu je návod, ako vytvoriť koreňový prvok, ktorý potom možno použiť na dynamické zostavenie zvyšku prvkov (ktorým sme sa už venovali v časti Manipulácia s podriadenými vetvami):
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; S: WideString; ... S: = '
Po vytvorení dokumentu XML ho uložte do súboru pomocou metódy Uložiť. Napríklad:
XMLDoc.Save (‚C: \ DATA \ NEWCD.XML‘);
Okrem uloženia do súboru vám metóda Save umožňuje uložiť XML dokument do nového objektu XMLDOMDocument. V tomto prípade je dokument úplne spracovaný a v dôsledku toho sa kontroluje jeho štruktúra a syntax. Tu je postup, ako uložiť dokument do iného objektu:
Procedure TForm1.Button2Click (Sender: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = nula; koniec;
Na záver, metóda Save vám tiež umožňuje uložiť dokument XML do iných objektov COM, ktoré podporujú rozhrania IStream, IPersistStream alebo IPersistStreamInit.
Používanie šablón XSL
Pri diskusii o metóde SelectNodes objektu XMLDOMNode sme spomenuli, že poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Flexibilita spočíva v tom, že ako kritérium na výber vetiev môžete zadať šablónu XSL. Takéto šablóny poskytujú výkonný mechanizmus na vyhľadávanie informácií v dokumentoch XML. Ak chcete napríklad získať zoznam všetkých titulov hudobných CD-ROM v našom adresári, môžete spustiť nasledujúci dotaz:
Ak chcete zistiť, ktoré disky umelcov sú vydané v Spojených štátoch, žiadosť je vytvorená takto:
Uzly: = Root.SelectNodes (‚CD / ARTIST‘);
Tu je návod, ako nájsť prvú jednotku v adresári:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
A naposledy:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
Ak chcete nájsť disky Boba Dylana, môžete spustiť nasledujúci dotaz:
Uzly: = Root.SelectNodes (‘CD [$ ľubovoľný $ ARTIST =” Bob Dylan ”] / TITLE’);
a na získanie zoznamu diskov vyrobených po roku 1985 spustíme nasledujúci dotaz:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
Podrobnejšia diskusia o syntaxi XSL si vyžaduje samostatnú publikáciu. Aby som čitateľov zaujal a podporil ďalší výskum, uvediem len jeden malý príklad možného použitia XSL. Povedzme, že potrebujeme previesť náš adresár na bežnú HTML tabuľku. Pomocou tradičných metód musíme iterovať cez všetky vetvy stromu a pre každý prijatý prvok vytvoriť zodpovedajúce značky
Pomocou XSL jednoducho vytvoríme šablónu (alebo šablónu so štýlmi), ktorá špecifikuje, čo a ako transformovať. Potom túto šablónu prekryjeme v našom katalógu – a máme hotovo: toto je text šablóny XSL, ktorý premení katalóg na tabuľku (Výpis 2).
Kód na prekrytie šablóny XSL v našom adresári vyzerá takto:
Procedure TForm1.Button2Click (Sender: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nula; koniec;
Na záver našej diskusie o XSL treba povedať, že v súčasnosti sa tento jazyk aktívne používa na transformáciu medzi rôznymi dokumentmi XML, ako aj na formátovanie dokumentov.
Záver
Z pochopiteľných dôvodov nie je možné pokryť všetky objekty Microsoft XML DOM a uviesť príklady ich použitia v jednom článku. Tu sme sa práve dotkli základných problémov používania XML DOM v aplikáciách. Tabuľka 3 zobrazuje všetky objekty implementované v Microsoft XML DOM.
ComputerPress 12 "2000
XML sa čoraz viac používa na ukladanie informácií a ich výmenu medzi aplikáciami a webovými stránkami. Mnoho aplikácií používa tento jazyk ako základný jazyk na ukladanie údajov, zatiaľ čo iné ho používajú na export a import údajov XML. Je teda čas, aby sa vývojári zamysleli nad tým, ako môžu byť údaje XML použité v ich vlastných aplikáciách.
V tomto článku sa pozrieme na XML Document Object Model (DOM) a implementáciu XML DOM od spoločnosti Microsoft.
XML DOM je objektový model, ktorý poskytuje vývojárom objekty na načítanie a spracovanie súborov XML. Objektový model pozostáva z nasledujúcich základných objektov: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap a XMLDOMParseError. Každý z týchto objektov (okrem XMLDOMParseError) obsahuje vlastnosti a metódy, ktoré vám umožňujú získať informácie o objekte, manipulovať s hodnotami a štruktúrou objektu a navigovať v štruktúre dokumentu XML.
Pozrime sa na hlavné objekty XML DOM a ukážeme si niekoľko príkladov ich použitia v Borland Delphi.
Použitie XML DOM v Borland Delphi
Aby ste mohli používať Microsoft XML DOM v aplikáciách Delphi, musíte k projektu pripojiť príslušnú knižnicu typov. Za týmto účelom spustíme príkaz Projekt | Importovať knižnicu typov a v dialógovom okne Importovať knižnicu typov vyberte knižnicu Microsoft XML verzie 2.0 (verzia 2.0), ktorá sa zvyčajne nachádza v súbore Windows \ System \ MSXML.DLL.
Po kliknutí na tlačidlo Create Unit sa vytvorí modul rozhrania MSXML_TLB, ktorý nám umožní využívať XML DOM objekty: DOMDocument, XMLDocument, XMLHTTPRequest a množstvo ďalších, implementovaných v knižnici MSXML.DLL. Odkaz na modul MSXML_TLB musí byť v zozname Použitie.
XML DOM zariadenie
Objektový model dokumentu predstavuje XML dokument v stromovej štruktúre vetiev. XML DOM API umožňujú aplikáciám prechádzať stromom dokumentov a manipulovať s jeho vetvami. Každá vetva môže mať špecifický typ (DOMNodeType), podľa ktorého sa určuje nadradená a dcérska vetva. Väčšina dokumentov XML obsahuje vetvy typu element, atribút a text. Atribúty sú špeciálnym druhom vetvy a nie sú podriadenými vetvami. Na manipuláciu s atribútmi sa používajú špeciálne metódy poskytované objektmi XML DOM.
Okrem implementácie rozhraní odporúčaných konzorciom World Wide Web Consortium (W3C), Microsoft XML DOM obsahuje metódy, ktoré podporujú XSL, XSL vzory, priestory názvov a dátové typy. Napríklad metóda SelectNodes vám umožňuje použiť syntax vzoru XSL na nájdenie vetiev v špecifickom kontexte a metóda TransformNode podporuje použitie XSL na vykonávanie transformácií.
Test XML dokumentu
Ako príklad dokumentu XML si vezmime adresár hudobného disku CD-ROM, ktorý má nasledujúcu štruktúru:
Teraz sme pripravení začať skúmať objektový model XML DOM, počnúc objektom XMLDOMDocument.
Dokument XML - Objekt XMLDOMDocument
Práca s dokumentom XML začína jeho načítaním. Používame na to metódu Load, ktorá má len jeden parameter, ktorý určuje URL načítaného dokumentu. Pri načítavaní súborov z lokálneho disku sa zadáva iba úplný názov súboru (súbor: /// protokol možno v tomto prípade vynechať). Ak je dokument XML uložený ako reťazec, na načítanie dokumentu použite metódu LoadXML.
Vlastnosť Async sa používa na ovládanie spôsobu načítania dokumentu (synchrónne alebo asynchrónne). V predvolenom nastavení je táto vlastnosť nastavená na hodnotu True, čo znamená, že dokument sa načíta asynchrónne a riadenie sa vráti do aplikácie pred úplným načítaním dokumentu. V opačnom prípade sa dokument načíta synchrónne a potom musíte skontrolovať hodnotu vlastnosti ReadyState, aby ste zistili, či sa dokument načítal alebo nie. Môžete tiež vytvoriť obsluhu udalosti pre udalosť OnReadyStateChange, ktorá prevezme kontrolu, keď sa zmení hodnota vlastnosti ReadyState.
Nasledujúci text ukazuje, ako načítať dokument XML pomocou metódy Load:
Používa ... MSXML_TLB ... procedure TForm1.Button1Click (Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // // Tu je kód, ktorý manipuluje // s XML dokumentom a jeho vetvami // XMLDoc: = Nil; koniec;
Po načítaní dokumentu máme prístup k jeho vlastnostiam. Takže vlastnosť NodeName bude obsahovať hodnotu #document, vlastnosť NodeTypeString bude obsahovať hodnotu dokumentu a vlastnosť URL bude obsahovať súbor: /// C: /DATA/DATA.xml value.
Spracovanie chýb
Obzvlášť zaujímavé sú vlastnosti súvisiace so spracovaním dokumentov pri načítaní. Napríklad vlastnosť ParseError vracia objekt XMLDOMParseError obsahujúci informácie o chybe, ktorá sa vyskytla počas spracovania dokumentu.
Ak chcete napísať obslužný program chýb, môžete pridať nasledujúci kód:
Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); XMLError: = XMLDoc.ParseError; Ak XMLError.ErrorCode<>0 Potom // // Tu riešime chybu // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = nula;
Ak chcete zistiť, aké informácie sa vrátia v prípade chyby, zmeňte nasledujúcu položku v adresári:
odstránenie uzatváracieho prvku
Teraz napíšme nejaký kód, ktorý vráti hodnoty vlastností objektu XMLDOMParseError:
XMLError: = XMLDoc.ParseError; Ak XMLError.ErrorCode<>0 Potom s chybou XMLError, Memo1.Lines začne Add (‚Súbor:‘ + URL); Pridať (‚Kód:‘ + IntToStr (Kód chyby)); Pridať („Chyba:“ + Dôvod); Pridať (‚Text:‘ + SrcText); Pridať („Riadok:“ + IntToStr (Riadok)); Pridať (‚Pozícia:‘ + IntToStr (LinePos)); end Else Memo1.Lines.Add (XMLDoc.XML); Koniec;
a spustite našu aplikáciu. V dôsledku toho získame nasledujúce informácie o chybe.
Ako môžete vidieť z vyššie uvedeného príkladu, informácie vrátené objektom XMLDOMParseError sú dostatočné na lokalizáciu chyby a pochopenie príčiny jej výskytu.
Teraz obnovíme uzatvárací prvok
Prístup k stromu dokumentov
Ak chcete získať prístup k stromu dokumentov, môžete buď získať koreňový prvok a potom iterovať jeho dcérske vetvy, alebo nájsť konkrétnu vetvu. V prvom prípade dostaneme koreňový element cez vlastnosť DocumentElement, ktorá vráti objekt typu XMLDOMNode. Tu je návod, ako použiť vlastnosť DocumentElement na získanie obsahu každého podradeného prvku:
Var Node: IXMLDOMNode; Koreň: IXMLDOMElement; I: celé číslo; ... Koreň: = XMLDoc.DocumentElement; Pre I: = 0 do Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Node.Text); Koniec;
Pre náš XML dokument dostaneme nasledujúci text.
Ak nás zaujíma konkrétna vetva alebo vetva pod prvou dcérskou vetvou, môžeme použiť buď metódu NodeFromID alebo metódu GetElementByTagName objektu XMLDOMDocument.
Metóda NodeFromID vyžaduje jedinečný identifikátor definovaný v schéme XML alebo definícii typu dokumentu (DTD) a vracia vetvu s týmto identifikátorom.
Metóda GetElementByTagName vyžaduje reťazec so špecifickým prvkom (značkou) a vracia všetky vetvy s týmto prvkom. Tu je návod, ako použiť túto metódu na nájdenie všetkých umelcov v našom adresári CD-ROM:
Uzly: IXMLDOMNodeList; Uzol: IXMLDOMNode; ... Uzly: = XMLDoc.GetElementsByTagName („ARTIST“); Pre I: = 0 až Nodes.Length-1 do Begin Node: = Nodes.Item [I]; Memo1.Lines.Add (Node.Text); Koniec;
Pre náš XML dokument dostaneme nasledujúci text
Všimnite si, že metóda SelectNodes objektu XMLDOMNode poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Ale o tom viac nižšie.
Vetva dokumentu - Objekt XMLDOMNode
Objekt XMLDOMNode predstavuje vetvu dokumentu. S týmto objektom sme sa už stretli, keď sme dostali koreňový prvok dokumentu:
Koreň: = XMLDoc.DocumentElement;
Ak chcete získať informácie o vetve dokumentu XML, môžete použiť vlastnosti objektu XMLDOMNode (tabuľka 1).
Na prístup k údajom uloženým vo vetve je bežné použiť buď vlastnosť NodeValue (dostupná pre atribúty, textové vetvy, komentáre, pokyny na spracovanie a sekcie CDATA), alebo vlastnosť Text, ktorá vráti textový obsah vetvy, resp. vlastnosť NodeTypedValue. Ten však možno použiť len pre pobočky s napísanými položkami.
Navigácia v strome dokumentov
Objekt XMLDOMNode poskytuje mnoho spôsobov navigácie v strome dokumentov. Napríklad na prístup k nadradenej vetve použite vlastnosť ParentNode (typ XMLDOMNode), pristupujte k podriadeným vetvám prostredníctvom vlastností ChildNodes (typ XMLDOMNodeList), FirstChild a LastChild (typ XMLDOMNode) atď. Vlastnosť OwnerDocument vracia objekt XMLDOMDocument, ktorý identifikuje samotný dokument XML. Vlastnosti uvedené vyššie uľahčujú navigáciu v strome dokumentov.
Teraz si prejdeme všetky vetvy dokumentu XML:
Koreň: = XMLDoc.DocumentElement; Pre I: = 0 do Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Node, 0); Koniec;
Ako je uvedené vyššie, SelectNodes objektu XMLDOMNode poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Okrem toho existuje metóda SelectSingleNode, ktorá vracia iba prvú vetvu dokumentu. Obe tieto metódy vám umožňujú definovať šablóny XSL pre vyhľadávanie pobočiek.
Pozrime sa na proces použitia metódy SelectNodes na načítanie všetkých vetiev, ktoré majú vetvu CD a podvetvu PRICE:
Koreň: = XMLDoc.DocumentElement; Uzly: = Root.SelectNodes (‚CD / CENA‘);
Všetky PRICE podvetvy vetvy CD budú umiestnené v kolekcii Nodes. K diskusii o šablónach XSL sa vrátime o niečo neskôr.
Manipulácia s detskými ratolesťami
Na manipuláciu s podriadenými vetvami môžeme použiť metódy objektu XMLDOMNode (tabuľka 2).
Ak chcete úplne odstrániť záznam o prvom disku, musíte spustiť nasledujúci kód:
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získanie koreňového prvku Root: = XMLDoc.DocumentElement; Uzol: = Koreň; // Odstránenie prvej dcérskej vetvy Node.RemoveChild (Node.FirstChild);
Všimnite si, že v tomto príklade odstraňujeme prvú dcérsku vetvu. Ako odstrániť prvý prvok prvej dcérskej vetvy je znázornené nižšie:
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získanie koreňového prvku Root: = XMLDoc.DocumentElement; // a prvá dcérska vetva Node: = Root.FirstChild; // Odstránenie prvej dcérskej vetvy Node.RemoveChild (Node.FirstChild);
Vo vyššie uvedenom príklade sme neodstránili prvú vetvu
Teraz pridajte novú vetvu. Nižšie je uvedený kód, ktorý ukazuje, ako pridať nový hudobný disk CD-ROM:
Var NewNode: IXMLDOMNode; Dieťa: IXMLDOMNode; ... // Vytvorenie novej pobočky -
Vyššie uvedený kód zobrazuje nasledujúce kroky na pridanie novej pobočky:
- Vytvorenie novej vetvy pomocou metódy CreateNode:
- vytvorenie prvku pomocou metódy CreateNode;
- pridanie prvku do vetvy pomocou metódy AppendChild;
- nastavenie hodnoty prvku prostredníctvom vlastnosti Text;
- … Opakujte pre všetky prvky.
- Pridanie novej vetvy do dokumentu pomocou metódy AppendChild.
Pripomeňme, že metóda AppendChild pridáva vetvu na koniec stromu. Ak chcete pridať vetvu na konkrétne miesto v strome, musíte použiť metódu InsertBefore.
Množina vetiev - objekt XMLDOMNodeList
Objekt XMLNodeList obsahuje zoznam vetiev, ktoré možno zostaviť pomocou metód SelectNodes alebo GetElementsByTagName a tiež získať z vlastnosti ChildNodes.
O použití tohto objektu sme už hovorili v príklade uvedenom v časti „Navigácia v strome dokumentov“. Tu je niekoľko teoretických komentárov.
Počet vetiev v zozname je možné získať ako hodnotu vlastnosti Dĺžka. Vetvy sú indexované od 0 do Dĺžka-1 a každá jednotlivá vetva je prístupná prostredníctvom zodpovedajúcej indexovanej položky v poli Item.
Navigáciu v zozname pobočiek je možné vykonať aj pomocou metódy NextNode, ktorá vráti ďalšiu vetvu v zozname alebo Nil, ak je aktuálna vetva posledná. Ak sa chcete vrátiť na začiatok zoznamu, zavolajte metódu Reset.
Vytvárajte a ukladajte dokumenty
Popísali sme teda, ako môžete pridať vetvy a prvky do existujúcich dokumentov XML. Teraz vytvoríme dokument XML za behu. V prvom rade nezabudnite, že dokument je možné načítať nielen z adresy URL, ale aj z bežného reťazca. Tu je návod, ako vytvoriť koreňový prvok, ktorý potom možno použiť na dynamické zostavenie zvyšku prvkov (ktorým sme sa už venovali v časti Manipulácia s podriadenými vetvami):
Var XMLDoc: IXMLDOMDocument; Koreň: IXMLDOMNode; Uzol: IXMLDOMNode; S: WideString; ... S: = '
Po vytvorení dokumentu XML ho uložte do súboru pomocou metódy Uložiť. Napríklad:
XMLDoc.Save (‚C: \ DATA \ NEWCD.XML‘);
Okrem uloženia do súboru vám metóda Save umožňuje uložiť XML dokument do nového objektu XMLDOMDocument. V tomto prípade je dokument úplne spracovaný a v dôsledku toho sa kontroluje jeho štruktúra a syntax. Tu je postup, ako uložiť dokument do iného objektu:
Procedure TForm1.Button2Click (Sender: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = nula; koniec;
Na záver, metóda Save vám tiež umožňuje uložiť dokument XML do iných objektov COM, ktoré podporujú rozhrania IStream, IPersistStream alebo IPersistStreamInit.
Používanie šablón XSL
Pri diskusii o metóde SelectNodes objektu XMLDOMNode sme spomenuli, že poskytuje flexibilnejší spôsob prístupu k vetvám dokumentu. Flexibilita spočíva v tom, že ako kritérium na výber vetiev môžete zadať šablónu XSL. Takéto šablóny poskytujú výkonný mechanizmus na vyhľadávanie informácií v dokumentoch XML. Ak chcete napríklad získať zoznam všetkých titulov hudobných CD-ROM v našom adresári, môžete spustiť nasledujúci dotaz:
Ak chcete zistiť, ktoré disky umelcov sú vydané v Spojených štátoch, žiadosť je vytvorená takto:
Uzly: = Root.SelectNodes (‚CD / ARTIST‘);
Tu je návod, ako nájsť prvú jednotku v adresári:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
A naposledy:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
Ak chcete nájsť disky Boba Dylana, môžete spustiť nasledujúci dotaz:
Uzly: = Root.SelectNodes (‘CD [$ ľubovoľný $ ARTIST =” Bob Dylan ”] / TITLE’);
a na získanie zoznamu diskov vyrobených po roku 1985 spustíme nasledujúci dotaz:
Uzly: = Root.SelectNodes (‚CD / TITLE‘);
Podrobnejšia diskusia o syntaxi XSL si vyžaduje samostatnú publikáciu. Aby som čitateľov zaujal a podporil ďalší výskum, uvediem len jeden malý príklad možného použitia XSL. Povedzme, že potrebujeme previesť náš adresár na bežnú HTML tabuľku. Pomocou tradičných metód musíme iterovať cez všetky vetvy stromu a pre každý prijatý prvok vytvoriť zodpovedajúce značky
Pomocou XSL jednoducho vytvoríme šablónu (alebo šablónu so štýlmi), ktorá špecifikuje, čo a ako transformovať. Potom túto šablónu prekryjeme v našom katalógu – a máme hotovo: toto je text šablóny XSL, ktorý premení katalóg na tabuľku (Výpis 2).
Kód na prekrytie šablóny XSL v našom adresári vyzerá takto:
Procedure TForm1.Button2Click (Sender: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load ('C: \ DATA \ DATA.xsl'); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nula; koniec;
Na záver našej diskusie o XSL treba povedať, že v súčasnosti sa tento jazyk aktívne používa na transformáciu medzi rôznymi dokumentmi XML, ako aj na formátovanie dokumentov.
Záver
Z pochopiteľných dôvodov nie je možné pokryť všetky objekty Microsoft XML DOM a uviesť príklady ich použitia v jednom článku. Tu sme sa práve dotkli základných problémov používania XML DOM v aplikáciách. Tabuľka 3 zobrazuje všetky objekty implementované v Microsoft XML DOM.
ComputerPress 12 "2000
Vítam všetkých! Niekoľko rokov som písal v Matlabe a potom som bol netrpezlivý, aby som napísal program v Delphi.
Potrebujem sa naučiť pracovať s xml dokumentmi. Pracujem v RAD Stiduo XE3. Existuje komponent TXMLDocument, pravdepodobne známy mnohým programátorom Delphi. Zdá sa, že dokáže veľa. Problém je však v tom, že k nemu neexistuje jasná dokumentácia a popis. Pomoc v RAD Studio je svinstvo, pretože tam nie sú žiadne normálne informácie; len roztrúsené po stránkach chabej pomoci k niektorým metódam a postupom (žiadne príklady a normálny popis). Prehrabaný celým internetom. Našli len témy na fórach s riešením konkrétnych problémov, kde musíte ďalšiu hodinu hádať, čo robí ten či onen riadok pri prístupe k xml súboru.
Potrebujem aj manuál o hlavných funkciách, postupoch a metódach používaných pri práci s xml. Učebnica, manuál, popis. Alebo aspoň "xml v Delphi pre figuríny". Napríklad:
Ak chcete otvoriť súbor xml, použite metódu XMLDocument1.LoadFromFile ("filemane.xml"), kde názov súboru je názov súboru.
Premenná nodelist typu IXMLNode sa používa na uloženie zoznamu potomkov. Na definovanie tohto zoznamu sa používa metóda Xmldocument1.DocumentElement (kde XMLDocument1 je súbor xml, ktorý sa má preskúmať).
Ak chcete zistiť obsah podradeného prvku "element1", použite metódu XMLDocument1.DocumentElement.ChildNodes ["element1"]. Text ....
a v tomto duchu ďalej na všetky aplikované metódy, postupy, dátové typy.
Kde nájdem podobné návody/popisy? Kto môže pomôcť?
Ak potrebujete konkrétnu úlohu, popíšem ju.
Existuje xml dokument formulára:
Nejaký text
Nejaký text chyby
Iný text chyby
V kóde programu máme:
var
...
rodič, dieťa1: IXMLNode;
začať
XMLDocument1.LoadFromFile ("f: \ názov_súboru.x ml");
XMLDocument1.Active: = true;
.
.
koniec
Čo sa musíte naučiť robiť:
(vopred sa ospravedlňujem, ak nesprávne pomenujem súčasti xml dokumentu)
1. Získajte názov koreňového prvku (v našom prípade ltm), ako aj zoznam jeho atribútov (verzia, typ) a ich hodnôt ("1.0", "nastavenia").
2. Získajte počet prvkov, ktoré sú potomkami koreňa. V tomto prípade je ich 7: templateFiles, dimensions, hotspot, hotspot, data, data, data. Získajte názvy prvkov (tagov) (templateFiles, rozmery atď.). Po získaní počtu prvkov a naučení sa, ako extrahovať ich mená, prejdem od 0 do počtu-1 a urobím, čo potrebujem.
3. Získajte číslo a zoznam atribútov požadovaného prvku. Napríklad pre prvok hotspot. Správna odpoveď by bola 4 atribúty. Pre prvý prvok hotspotu to budú názov, štýl, scéna, ath. Pre druhý - to isté, len namiesto atribútu ath - atribút rz.
Všimnite si, že v súbore sú 2 prvky aktívneho bodu s rôznymi atribútmi. Tu je návod, ako s nimi pracovať (ak existuje viac ako 1 prvok s rovnakým názvom)?
Chcem takto: dostanem zoznam detí podľa rel. ku koreňovému (pozri str. 2), spustite cez ne cyklus for a nájdite prvky hotspotu, v ktorých sa parameter name rovná požadovanému (povedzme "hs015_2" - jeden taký prvok určite bude). Je možné nejako vyriešiť tento problém bez slučky? To znamená, že chcete získať hodnotu atribútu scény pre prvok hotspot s názvom = "hs015_2"?
4. Vykonajte vyššie uvedené pre uzly a prvky, ktoré sú vo vzťahu k deťom deti. V mojom príklade je uzol (dieťa a rodič a.
Ak tomu dobre rozumiem, musíte nejako preniesť obsah uzla do premenná typu IXMLNode a urobte to isté ako v položkách 1-3. Takže?
5. Musíte sa naučiť, ako zmeniť vyššie uvedené parametre (nastaviť si vlastné).
Zdá sa to zatiaľ. V tejto fáze sú pre mňa najdôležitejšie syntaktické konštrukcie.
Kto vlastní túto tému, prosím napíšte iné syntaktické konštrukcie na vyriešenie vyššie uvedených problémov (ako získať atribúty, ich počet, počet prvkov, ich názvy atď.). Hlavná vec je teraz zvládnuť syntax a svoj algoritmus implementujem neskôr. Vopred veľmi pekne ďakujem!
P.S. Naozaj by som nechcel písať svoj vlastný XML parser od začiatku len preto, že neexistuje žiadny normálny popis pre existujúce.