
A mellékelt példa megnyitása előtt szükséges egy DOMDocument01 nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát, és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A MSXML 4.0 Service Pack 2 telepítéséhez olvassa el a cikk Bevezetés című szakaszát.
Bevezetés
A csomag, mely sok javítást tartalmaz, és jelentős fejlesztésen ment keresztül, a cikk írásakor a következő címről volt letölthető:
http://www.microsoft.com/downloads/details.aspx?FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&displaylang=en#filelist
A cím azóta természetesen meg is változhatott. Amennyiben a komponenst több eszközből és fejlesztőkörnyezetből kívánjuk elérni, ajánlatos letölteni a teljes változatot, mely msxml.msi néven kerül merevlemezünkre, és a MSXML 4.0 SDK összetevőt is tartalmazza, mely dokumentációt és jelentős segítséget nyújt a fejlesztéshez.
A Software Development Kit (SDK) alapértelmezésben nem installálódik. Ehhez a Custom telepítési módot kell választanunk, és gondoskodnunk kell az összetevő kijelöléséről.
A telepítés után a Windows rendszermappájába három állomány kerül: msxml4.dll, msxml4a.dll, és msxml4r.dll. Ezek közül az első regisztrálódik a Rendszerleíró adatbázisban.
A COM komponens bejegyzésének létezését ellenőrizhetjük a Visual Studio.NET segítségével is. Ebben az esetben meg kell nyitnunk a referencia hozzáadásakor felbukkanó dialógusablakot, és a COM komponensek listájában meg tudjuk keresni a Microsoft XML, v4.0 nevű elemet, mely az msxml4.dll állományra mutat.
A csomag osztályai
A csomagban elérhető komponens több szabvány mellett tartalmazza a Document Object Model (DOM) implementációját is, hogy támogatást nyújtson az XML adatstruktúrával történő munkához. A megvalósítás teljes egészében a W3C DOM szabványára épül.
A csomag osztályainak felhasználásával tökéletesen tudunk kliens-oldali Script-ből vagy Windows Script Host (WSH) parancsállományból XML állományt felépíteni, a csomópontok közt navigálni vagy frissíteni annak tartalmát, illetve transzformálni azt.
A cikksorozat első részében a DOMDocument osztállyal ismerkedünk meg, mely az alaposztálya a DOM implementációnak.
DOMDocument osztály
A WebForm1.aspx lap betöltődésekor egy szövegmezőbe olvassuk a mellékelt products.xml állomány tartalmát. Az állomány a MS SQL Server beépített Northwind adatbázis Products táblájának egy részletét tartalmazza. Ennek érdekében csupán arra van szükségünk, hogy – JScript nyelvet használván a kliens-oldali Script-ben – egy új objektumot hozzunk létre az ActiveXObject konstruktorral. A létrehozás módja a következő:
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
Beállítjuk, hogy az objektum ellenőrizze az XML állomány formátumának helyességét. Erre a validateOnParse property alkalmas.
xmldoc.validateOnParse = false;
A betöltés pedig csak egyetlen lépés, akár csak a .NET Framework XmlDocument osztályának segítségével a szerver-oldali kódban.
xmldoc.load("products.xml");
A DOMDocument osztály számtalan property-vel rendelkezik. A feladat szempontjából az XML property az, melynek segítségével az állomány tartalmát a szövegmezőbe tölthetjük.
document.all.TextBox1.innerText = xmldoc.xml;
A szövegmező alatti ComboBox kontrolba betöltjük az XML állomány <ProductID></ProductID> tagjai közt megtalálható termékazonosítót, melyre majd rákeresünk a feladat második részében.
Elsőként lekérdezzük az állomány gyökérelemét.
root = xmldoc.documentElement;
Majd végigmegyünk ennek gyermekcsomópontjain és mindegyik <Product></Product> csoportból kivesszük a fenti tag értékét, és a listába (SELECT objektum) helyezzük.
for (var i=0;i<root.childNodes.length;i++)
{
o = document.createElement("OPTION");
o.text = root.childNodes.item(i).childNodes.item(0).text;
document.all.ComboBox1.options.add(o);
}
Látható, hogy elsőként készítünk egy-egy OPTION elemet, majd ennek TEXT property-jében helyezzük el az adott számot, és az objektumot felfűzzük a listára.
A feladat második részében egy keresést végzünk az XML-ben. A nyomógomb megnyomásakor lefut a GetProduct függvényünk, melyben megkeressük az XML állomány azon elemét, melynek a termékazonosítója a listából kiválasztott szám.
for (var i=0;i<root.childNodes.length;i++)
{
if (root.childNodes.item(i).childNodes.item(0).text == document.all.ComboBox1.options.item(document.all.ComboBox1.selectedIndex).innerText)
{
document.all.TextBox2.innerText = root.childNodes.item(i).childNodes.item(1).text;
}
}
Minden egyes gyermekcsomópont TEXT property-je tartalmazza az adott csomópont szövegét, így elegendő azt összevetni a lista adott elmével.