Az msxml elemző használata xml dokumentumokkal
A feldolgozási utasítást képviseli
1. táblázat XML DOM objektumok és azok használata
Néha ez zavaró lehet, de az XML dokumentum objektumok (és gyakran is) polimorfok lehetnek. Tehát egy csomópont (csomópont) egyidejűleg egy elem (elem). Ez zavart okoz, amikor eldönti, melyik DOM objektum szükséges bizonyos művelet végrehajtásához. Csomópontokat hoz létre egy dokumentumobjektum használatával, de ha új attribútumokat kell hozzáadnia az újonnan létrehozott csomóponthoz, akkor az elemek egyikeként kell dolgoznia. Ha a tárgyak és akciók közötti kapcsolatokban bizonyos szabályosság van, még nem tudtam megnyitni a mindennapi munkák során. Folyamatosan utalok az MSDN dokumentációjára, hogy lássam, melyik felület biztosítja azokat a módszereket, amelyekre szükségem van egy adott feladat megoldására. A különböző objektumok módszerei logikusan vannak csoportosítva, és nyilvánvalóan ez a nagyon elv (a logikailag kapcsolódó műveletek csoportosítása) a DOM kialakításánál használták.
Így az egész trükk az, hogy megkapja a szükséges DOM objektumot az MSXML elemzőből, amelynek végrehajtását a COM objektum biztosítja. A szokásos műveletsor magában foglalja az MSXML COM objektumának létrehozását, amely lekérdezheti (vagy egyéb módon fogadására) mutatókat más XML DOM objektumokhoz (amelyek viszont szintén COM objektumok).
Demo alkalmazás XML DOM használatával
Az MSXML sokféle funkcióját kihasználó töredezett alkalmazás létrehozása egyáltalán nem nehéz, de az extra kód csak zavart okozhat. Ezért úgy döntöttem, hogy egy egyszerű konzolalkalmazást írok, amely négy alapvető műveletet hajt végre:
- Betölti az XML fájlt a lemezről.
- Keresi a konkrét csomópontot, és hozzá egy gyermek csomópontot hozzá.
- Talál egy másik csomópontot, és megjeleníti a benne lévő szöveget.
- A módosított dokumentumot lemásolja.
A feladat további egyszerűsítése érdekében szigorúan "beillesztettem" a programba az XML fájlok és csomópontok nevét. Nyilvánvaló, hogy egy igazi alkalmazásban nem valószínű, hogy alkalmazza ezt a taktikát. De mi esetünkben van értelme, mivel tovább egyszerűsíti az MSXML használatával kapcsolatos kódot.
Mint sok más esetben, az ATL könyvtárat kényelmes csomagolóanyagként használtam a példában szereplő összes COM-művelettel kapcsolatban. Ezért mindenképpen látni fogod, hogyan használom a CComPtr és a CComQIPtr objektumokat. Igazságos számlára adtam hozzá CComBSTR és CComVariant objektumokat. Ha nem ismerik magukat, ne felejtsük el, hogy sablonok, és maguk is gondoskodnak a sok részletről, amelyek nem nélkülözik célunkat. Fontos számunkra, hogy fontoljuk meg, hogyan kereshetünk XML csomópontokat, új csomópontokat adhatunk meg és megjeleníthetjük a benne lévő szöveget.
A konzolalkalmazás betölti az xmldata.xml nevű XML-dokumentumot (feltéve, hogy ugyanabban a könyvtárban van, mint a végrehajtható fájl), amely a következő adatokat tartalmazza: