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

A cikk fordítása A cikk fordítása
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>
8.99
</price>
</book>
<book>
<title>
A szélhámos
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book>
<title>
Gorgiasz
</title>
<author>
<name>
Platón
</name>
</author>
<price>
9.99
</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: (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-keretrendszer 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/hu-hu/magazine/cc302158(en-us).aspx
Az XmlReader osztályról az alábbi MSDN-webhelyen tájékozódhat:
http://msdn.microsoft.com/hu-hu/library/system.xml.xmlreader(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(VS.71).aspx

http://msdn.microsoft.com/hu-hu/library/tfz3cz6w(vs.71).aspx
Megjegyzés: Ez egy „GYORS KÖZZÉTÉTELŰ” cikk, amelyet maga Microsoft támogatási csoportja készített. A benne fogalt információkat a jelentkező problémákra válaszul, az adott állapotukban biztosítjuk. Az anyagok a közzétételük gyorsaságából következően tartalmazhatnak sajtóhibákat, illetve külön értesítés nélkül bármikor átdolgozáson eshetnek át. További tudnivalók olvashatók a felhasználási feltételek között.

Tulajdonságok

Cikk azonosítója: 307548 - Utolsó ellenőrzés: 2013. május 31. - Verziószám: 1.0
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: 
kbdownload kbhowtomaster 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

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com