XML-tartalom beolvasása fájlból a Visual C# használatával

Cikk azonosítója: 307548 - A cikkben érintett termékek listájának megtekintése.
Az összes kibontása | Az összes összecsukása

A lap tartalma

Összefoglaló

A cikkből megismerheti, hogy az XmlTextReader osztály segítségével hogyan olvashat be Extensible Markup Language (XML) programozási nyelvű tartalmat fájlból. Az XmlTextReader az XML-tartalom közvetlen elemzését és tokenekre bontását biztosítja, megvalósítja az XML 1.0 specifikációt, valamint a World Wide Web Consortium (W3C) XML-specifikációinak névtereit. A cikk gyors, tokenekre bontott adatfolyam-hozzáférést biztosít az XML-tartalomhoz objektummodell (például XML Document Object Model – DOM) használata helyett.

Követelmények

Az alábbi lista a javasolt hardver- és szoftverkövetelményeket, valamint hálózati infrastruktúrát, illetve a szükséges szervizcsomagokat sorolja fel:
  • Microsoft Visual Studio 2005 vagy Microsoft Visual Studio .NET
A cikk feltételezi, hogy jártas az alábbi területeken:
  • XML-terminológia
  • XML-fájl létrehozása és olvasása

XML-tartalom olvasása fájlból

Ez a példa egy Books.xml nevű fájlt használ. Létrehozhat egyéni Books.xml fájlt, vagy használhatja a példafájlt, amely megtalálható a .NET Software Development Kit (SDK) QuickStarts csomagban, a következő mappában:
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
A Books.xml fájlt másolja a \Bin\Debug mappába, amely a projekt létrehozási mappája alatt található. A Books.xml le is tölthető. A letöltés helyét a „Hivatkozások” című részben találja.
  1. Indítsa el a Visual Studio 2005 vagy a Visual Studio .NET alkalmazást.
  2. Hozzon létre új Visual C# konzolalkalmazást. Ha nem kíván az alábbi lépésekkel létrehozni ilyen alkalmazást, ugorjon a „Teljes kódlista” című részhez, és folytassa ott az eljárást.
  3. Ellenőrizze, hogy a projekt tartalmaz-e hivatkozást a System.Xml.dll összetevőre.
  4. Adja meg a using utasítást a System.Xml névterében annak érdekében, hogy később, a kódban ne kelljen minősítenie az XmlTextReader deklarációit. A using utasítást az összes többi deklaráció előtt kell használnia.
    using System.Xml;
    					
  5. Hozza létre az XmlTextReader objektum egy példányát, és töltse ki az XML-fájllal. Az XmlTextReader osztály általában akkor használható, ha az XML-tartalomhoz nyers adatként, a DOM nélkül szeretne hozzáférni. Ezért az XmlTextReader osztály az XML-tartalom olvasásának gyorsabb módja. Az XmlTextReader osztályhoz különböző konstruktorok tartoznak, amelyekkel megadható az XML-adatok helye. Az alábbi kód létrehozza az XmlTextReader osztály egy példányát, és betölti a Books.xml fájlt. Adja hozzá az alábbi kódot a Class1 osztály fő eljárásához.
    XmlTextReader reader = new XmlTextReader ("books.xml");
    					
  6. Olvassa el az XML-tartalmat. (Ne feledje, hogy ez a lépés egy külső „while” ciklust ismertet, a következő kettő pedig azt szemlélteti, hogy a ciklus hogyan használható az XML-tartalom olvasásához.) Miután létrehozta az XmlTextReader objektumot, a Read metódussal olvashatja az XML-adatokat. A Read metódus folyamatosan végighalad az XML-fájlon, amíg eléri annak végét, és ekkor a Read metódus a „False” értéket adja vissza.
    while (reader.Read()) 
    {
        // Végezze el az adatok módosítását.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    					
  7. Vizsgálja meg a csomópontokat. Az XML-adatok feldolgozásához minden rekord csomóponttípussal rendelkezik, amely a NodeType tulajdonságból állapítható meg. A Name és a Value tulajdonság visszaadja a csomópont nevét (az összetevő és az attribútum nevét) és az aktuális csomópont (vagy rekord) értékét (a csomópont szövegét). A NodeType számbavétele határozza meg a csomópont típusát. Az alábbi példakód megjeleníti az összetevők nevét és a dokumentum típusát. A példa figyelmen kívül hagyja az összetevők attribútumait.
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // A csomópont egy összetevő.
                Console.Write("<" + reader.Name);
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Az egyes összetevők szövegének megjelenítése.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Az összetevő végének megjelenítése.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
    					
  8. Vizsgálja meg az attribútumokat. Az összetevők csomóponttípusai tartalmazhatják a hozzájuk tartozó attribútum-csomópontok listáját. A MovetoNextAttribute folyamatosan végighalad az összetevők egyes attribútumain. A HasAttributes tulajdonsággal tesztelheti, hogy a csomóponthoz tartozik-e attribútum. Az AttributeCount tulajdonság visszaadja az aktuális csomópont attribútumainak számát.
    while (reader.Read()) 
    {
           switch (reader.NodeType) 
           {
               case XmlNodeType.Element: // A csomópont egy összetevő.
                   Console.Write("<" + reader.Name);
    
                   while (reader.MoveToNextAttribute()) // Az attribútumok olvasása.
                       Console.Write(" " + reader.Name + "='" + reader.Value + "'");
          Console.WriteLine(">");
                   break;
         case XmlNodeType.Text: //Az egyes összetevők szövegének megjelenítése.
                   Console.WriteLine (reader.Value);
                   break;
         case XmlNodeType. EndElement: //Az összetevő végének megjelenítése.
                   Console.Write("</" + reader.Name);
          Console.WriteLine(">");
                   break;
           }
       }
    					
  9. Mentse, majd zárja be a projektet.

Teljes kódlista

using System;
using System.Xml;

namespace ReadXMLfromFile
{
    /// <summary>
    /// A Class1 összesítő leírása.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            XmlTextReader reader = new XmlTextReader ("books.xml");
            while (reader.Read()) 
            {
                switch (reader.NodeType) 
                {
                    case XmlNodeType.Element: // A csomópont egy összetevő.
                        Console.Write("<" + reader.Name);
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Az egyes összetevők szövegének megjelenítése.
                        Console.WriteLine (reader.Value);
                        break;
                    case XmlNodeType.EndElement: //Az összetevő végének megjelenítése.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
            Console.ReadLine();
        }
    }
}
				

Példa a kimenetre

<bookstore>
<book>
<title>
Benjamin Franklin önéletrajza
</title>
<author>
<first-name>
Benjamin
</first-name>
<last-name>
Franklin
</last-name>
</author>
<price>
899
</price>
</book>
<book>
<title>
A szélhámos
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
1199
</price>
</book>
<book>
<title>
Gorgiasz
</title>
<author>
<name>
Platón
</name>
</author>
<price>
999
</price>
</book>
</bookstore>
				

Hibaelhárítás

A kód ellenőrzésekor a következő, kivételhibát jelző üzenet jelenhet meg: Unhandled Exception: System.Xml.XmlException: Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. (Nem kezelt kivétel: System.Xml.XmlException: Váratlan XML-deklaráció. Az XML-deklarációnak az első csomópontnak kell lennie a dokumentumban, amely előtt nem állhat üres karakter.)

Additional information: System error. The exception error occurs on the following line of code: While (További információ: Rendszerhiba. A kivételhiba a következő kódsoron jelenik meg: While)
(reader.Read()) 
A hibát egy érvénytelen feldolgozási utasítás okozza. Előfordulhat, hogy a feldolgozási utasítás például felesleges szóközöket tartalmaz. Példa egy érvénytelen feldolgozási utasításra:
<?xml version='1.0' ?>
Az XML-címke a ‘<’ zárójel előtt egy szóközt tartalmaz. A hiba megoldása érdekében távolítsa el ezt az üres karaktert.

HIVATKOZÁSOK

A következő fájl letölthető a Microsoft letöltőközpontjából:
A kép összecsukásaA kép kibontása
Letöltés
A Books.exe csomag letöltése
A .NET Framework XML-osztályairól és a C# programozási nyelvről további információkat a Microsoft Developer Network (MSDN) alábbi webhelyén talál:
http://msdn.microsoft.com/msdnmag/issues/01/01/xml
Az XmlReader osztályról az alábbi MSDN-webhelyen tájékozódhat:
http://msdn.microsoft.com/hu-hu/library/system.xml.xmlreader(en-us,vs.71).aspx
Az XML-adatoknak az XmlReader objektum használatával történő olvasásáról az alábbi MSDN-webhelyen tájékozódhat:
http://msdn.microsoft.com/hu-hu/library/aa720470(en-us,VS.71).aspx

http://msdn.microsoft.com/hu-hu/library/tfz3cz6w(en-us,vs.71).aspx
Ha további általános információkra van szüksége a Visual C# .NET programozási nyelvről vagy az XML nyelvnek a .NET környezetben való használatáról, olvassa el az alábbi Usenet-hírcsoportokat:
microsoft.public.dotnet.languages.csharp

microsoft.public.dotnet.xml

Tulajdonságok

Cikk azonosítója: 307548 - Utolsó ellenőrzés: 2008. május 21. - Verziószám: 4.1
A cikkben található információ a következő(k)re vonatkozik:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Kulcsszavak: 
kbhowtomaster kbdownload KB307548
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók.

Visszajelzés küldése