HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

XML csomópontok értékének lekérdezése szelektíven


Példaprogram letöltése

8596 bájt

Az XML állományok feldolgozása gyerekjáték a .NET Framework számtalan névterének és osztályának köszönhetően. Egy XML állományt beolvashatunk egy DataSet objektumba, ekkor azonban az állomány valamennyi információja szükségszerűen rendelkezésre áll, holott nem biztos, hogy minden adatra szükségünk van az XML-ből. Azonban használhatjuk a System.Xml.XPath névtér osztályait annak érdekében, hogy egy XML-ben adott adathalmaznak csak egy általunk megadott része kerüljön feldolgozásra.

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...

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 487. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |