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.
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:
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:
a záróelem eltávolítása
Most írjunk egy kódot, amely visszaadja az XMLDOMParseError objektum tulajdonságértékeit:
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;
és hajtsa végre az alkalmazásunkat. Ennek eredményeként a következő információkat kapjuk a hibáról.
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.
Most visszaállítjuk a záróelemet
A dokumentumfa elérése
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:
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;
XML dokumentumunkhoz a következő szöveget kapjuk.
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.
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.
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:
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;
XML dokumentumunkhoz a következő szöveget kapjuk
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.
Dokumentum ág - XMLDOMNode objektum
Az XMLDOMNode objektum egy dokumentum ágat képvisel. Már találkoztunk ezzel az objektummal, amikor megkaptuk a dokumentum gyökérelemét:
Gyökér: = XMLDoc.DocumentElement;
Ha információkat szeretne szerezni egy XML-dokumentum egy ágáról, használhatja az XMLDOMNode objektum tulajdonságait (1. táblázat).
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ó.
Navigálás a dokumentumfán
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.
Most nézzük át az XML dokumentum összes ágát:
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;
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.
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:
Gyökér: = XMLDoc.DocumentElement; Csomópontok: = Root.SelectNodes ('CD / PRICE');
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.
Gyermekágak manipulálása
A gyermekágak kezeléséhez használhatjuk az XMLDOMNode objektum metódusait (2. táblázat).
Az első lemez rekordjának teljes törléséhez futtassa a következő kódot:
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);
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:
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);
A fenti példában nem az első ágat töröltük
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 -
A fenti kód a következő lépések sorozatát mutatja egy új ág hozzáadásához:
- Új ág létrehozása CreateNode metódussal:
- elem létrehozása a CreateNode metódussal;
- elem hozzáadása egy ághoz az AppendChild metódussal;
- egy elem értékének beállítása a Text tulajdonságon keresztül;
- … Ismételje meg az összes elemre.
- Új ág hozzáadása a dokumentumhoz az AppendChild metódussal.
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.
Elágazáskészlet - XMLDOMNodeList objektum
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.
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.
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.
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.
Dokumentumok létrehozása és mentése
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):
Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; S: WideString; ... S: = "
Az XML dokumentum elkészítése után mentse el egy fájlba a Mentés módszerrel. Például:
XMLDoc.Save ('C: \ DATA \ NEWCD.XML');
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:
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;
Ö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.
XSL sablonok használata
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:
Hogy megtudja, mely művészek lemezei jelennek meg az Egyesült Államokban, a kérés a következőképpen alakul:
Csomópontok: = Root.SelectNodes ('CD / ARTIST');
A következőképpen találhatja meg az első meghajtót egy könyvtárban:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
És utolsó:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
Bob Dylan lemezeinek megkereséséhez futtassa a következő lekérdezést:
Nodes: = Root.SelectNodes (’CD [$ any $ ARTIST =” Bob Dylan ”] / CÍM’);
és az 1985 után készült lemezek listájának megjelenítéséhez a következő lekérdezést futtatjuk:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
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.
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).
A kód, amely egy XSL-sablont lefed a könyvtárunkban, így néz ki:
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;
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.
Következtetés
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.
ComputerPress 12 "2000
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 XML DOM objektumok által biztosított speciális módszereket használják az attribútumok manipulálására.
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:
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:
a záróelem eltávolítása
Most írjunk egy kódot, amely visszaadja az XMLDOMParseError objektum tulajdonságértékeit:
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;
és hajtsa végre az alkalmazásunkat. Ennek eredményeként a következő információkat kapjuk a hibáról.
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.
Most visszaállítjuk a záróelemet
A dokumentumfa elérése
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:
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;
XML dokumentumunkhoz a következő szöveget kapjuk.
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.
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.
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:
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;
XML dokumentumunkhoz a következő szöveget kapjuk
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.
Dokumentum ág - XMLDOMNode objektum
Az XMLDOMNode objektum egy dokumentum ágat képvisel. Már találkoztunk ezzel az objektummal, amikor megkaptuk a dokumentum gyökérelemét:
Gyökér: = XMLDoc.DocumentElement;
Ha információkat szeretne szerezni egy XML-dokumentum egy ágáról, használhatja az XMLDOMNode objektum tulajdonságait (1. táblázat).
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ó.
Navigálás a dokumentumfán
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.
Most nézzük át az XML dokumentum összes ágát:
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;
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.
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:
Gyökér: = XMLDoc.DocumentElement; Csomópontok: = Root.SelectNodes ('CD / PRICE');
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.
Gyermekágak manipulálása
A gyermekágak kezeléséhez használhatjuk az XMLDOMNode objektum metódusait (2. táblázat).
Az első lemez rekordjának teljes törléséhez futtassa a következő kódot:
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);
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:
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);
A fenti példában nem az első ágat töröltük
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 -
A fenti kód a következő lépések sorozatát mutatja egy új ág hozzáadásához:
- Új ág létrehozása CreateNode metódussal:
- elem létrehozása a CreateNode metódussal;
- elem hozzáadása egy ághoz az AppendChild metódussal;
- egy elem értékének beállítása a Text tulajdonságon keresztül;
- … Ismételje meg az összes elemre.
- Új ág hozzáadása a dokumentumhoz az AppendChild metódussal.
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.
Elágazáskészlet - XMLDOMNodeList objektum
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.
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.
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.
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.
Dokumentumok létrehozása és mentése
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):
Var XMLDoc: IXMLDOMDocument; Gyökér: IXMLDOMNode; Csomópont: IXMLDOMNode; S: WideString; ... S: = "
Az XML dokumentum elkészítése után mentse el egy fájlba a Mentés módszerrel. Például:
XMLDoc.Save ('C: \ DATA \ NEWCD.XML');
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:
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;
Ö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.
XSL sablonok használata
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:
Hogy megtudja, mely művészek lemezei jelennek meg az Egyesült Államokban, a kérés a következőképpen alakul:
Csomópontok: = Root.SelectNodes ('CD / ARTIST');
A következőképpen találhatja meg az első meghajtót egy könyvtárban:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
És utolsó:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
Bob Dylan lemezeinek megkereséséhez futtassa a következő lekérdezést:
Nodes: = Root.SelectNodes (’CD [$ any $ ARTIST =” Bob Dylan ”] / CÍM’);
és az 1985 után készült lemezek listájának megjelenítéséhez a következő lekérdezést futtatjuk:
Csomópontok: = Root.SelectNodes ('CD / CÍM');
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.
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).
A kód, amely egy XSL-sablont lefed a könyvtárunkban, így néz ki:
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;
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.
Következtetés
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.
ComputerPress 12 "2000
Üdvözlök mindenkit! Több éve írok a Matlabon, aztán türelmetlen voltam, hogy programot írjak Delphi-re.
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.
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:
XML-fájl megnyitásához használja az XMLDocument1.LoadFromFile ("filemane.xml") metódust, ahol a fájlnév a fájl neve.
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.
Az "element1" gyermekelem tartalmának lekérdezéséhez használja az XMLDocument1.DocumentElement.ChildNodes ["element1"] Szöveg ... metódust.
és ennek szellemében tovább minden alkalmazott módszerről, eljárásról, adattípusról.
Hol találok hasonló kézikönyveket/leírásokat? Ki tud segíteni?
Ha kell konkrét feladat, leírom.
Van egy xml-dokumentum a következő űrlappal:
Némi szöveg
Valami hibaszöveg
Egyéb hibaszöveg
A programkódban a következők találhatók:
var
...
szülő, gyermek1: IXMLNode;
kezdődik
XMLDocument1.LoadFromFile ("f: \ fájlnév.x ml");
XMLDocument1.Active: = igaz;
.
.
vége
Amit meg kell tanulnod csinálni:
(Előre is elnézést kérek, ha rosszul nevezem meg az xml dokumentum összetevőit)
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").
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.
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.
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)?
Í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?
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.
Ha jól értem, valahogy át kell vinni a csomópont tartalmát ide változó tetszik IXMLNode, és tegye ugyanazt, mint az 1-3. Így?
5. Meg kell tanulnia a fenti paraméterek megváltoztatását (állítsa be saját magát).
Eddig úgy tűnik. Ebben a szakaszban számomra a szintaktikai konstrukciók a legfontosabbak.
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.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.