Az osztályok lehetővé teszik, hogy – SQL-nyelvbeli hasonlattal élve - megfogalmazzunk egy SELECT utasítást annak érdekében, hogy egy-egy csomópontnak csak bizonyos eleme legyen beolvasva (egy adott tagban található érték), a többi maradjon figyelmen kívül. Világítsuk meg ezt a példa XML állománnyal.
A products.xml állomány szerkezete a következő:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Products IMAGE_INDEX_HEAD="1" IMAGE_INDEX_VALUE="2">
<ID>1</ID>
<PRODUCT_NAME>Item1</PRODUCT_NAME>
<UNIT_PRICE>45035</UNIT_PRICE>
</Products>
...
</NewDataSet>
A megfogalmazott utasítással arra van lehetőség, hogy a <Products> csomópontokban (melyek egy termék adatait tartalmazzák) például csak a <UNIT_PRICE> tagokon belüli értékeket válogassuk le. Tovább is szűkíthetjük a lekérdezést úgy, hogy csak egy azonosítóval rendelkező árat kérdezünk le.
A példában a Form két ComboBox kontroljában van lehetőségünk megadni, hogy mely adattípusra van szükségünk, és azon belül mely <ID> tagban megtalálható értékkel rendelkező termék adata érdekel minket. Amennyiben a jelölőnégyzetet kijelöljük, akkor az adott adattípus minden termékből listázásra kerül a ListBox kontrolban.
Az XPath névtér XPathNavigator osztályának segítségével tudjuk megadni a lekérdezés karakterláncát, annak is a Select metódusában. Első lépésben betöltjük az XML állományt a memóriába.
XPathDocument xpathdoc = new XPathDocument("products.xml");
Ezt követően létrehozunk egy példányt az XPathNavigator osztályból.
XPathNavigator navigator = xpathdoc.CreateNavigator();
Az objektum Select metódusában összeállítjuk a lekérdezés karakterláncát, mely nem-jelölt négyzet esetén a következő:
iterator = navigator.Select("//ID[. = '" + comboBox2.Text + "']/parent::node()/" + comboBox1.Text);
Látható, hogy a megadott azonosítóval rendelkező termék adott adattípusa kerül leválogatásra.
Jelölt négyzet esetén minden termékre elvégezzük ezt.
iterator = navigator.Select("/NewDataSet/Products/" + comboBox1.Text);
A lekérdezések eredménye egy XPathIterator objektumba kerül, melynek elemein egy While ciklussal mehetünk végig.
while (iterator.MoveNext())
{
...
Az egyes elemek értékei a következőképpen nyerhetők ki:
iterator.Current.Value;
...
}
Hogy éppen hányadik elemet dolgozzuk fel, megtudható a CurrentPosition property lekérdezésével.
iterator.CurrentPosition...