Odczytywanie danych XML z pliku przy użyciu języka Visual C++

W tym artykule pokazano, jak używać XmlTextReader klasy do odczytywania danych XML z pliku.

Oryginalna wersja produktu: Visual C++
Oryginalny numer KB: 815658

Podsumowanie

W tym artykule opisano sposób używania XmlTextReader klasy do odczytywania danych XML z pliku. Klasa XmlTextReader zapewnia bezpośrednią analizę i tokenizację danych XML. Klasa XmlTextReader implementuje również specyfikację XML 1.0 oprócz przestrzeni nazw w specyfikacji XML zdefiniowanej przez world wide web consortium (W3C). W tym artykule opisano sposób szybkiego, tokenizowanego dostępu strumienia do danych XML zamiast używania modelu obiektów, takiego jak model obiektu dokumentu XML (DOM).

Aby zapoznać się z wersją programu Microsoft Visual C# dla platformy .NET tego artykułu, zobacz How to read XML from a file by using Visual C#(Jak odczytywać kod XML z pliku przy użyciu języka Visual C#).

W tym artykule opisano następującą przestrzeń nazw biblioteki klas microsoft .NET Framework:System.xml

Wymagania

W tym artykule założono, że znasz następujące tematy:

  • Terminologia XML
  • Jak utworzyć plik XML i jak go odczytać

Na poniższej liście przedstawiono zalecany sprzęt, oprogramowanie, infrastrukturę sieciową i dodatki Service Pack, których potrzebujesz:

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Odczytywanie danych XML z pliku

W przykładzie w tym artykule użyto pliku o nazwie Books.xml. Możesz utworzyć własny plik Books.xml lub użyć przykładowego pliku dołączonego do przewodników Szybki start zestawu Microsoft .NET Software Development Kit (SDK). Musisz skopiować plik Books.xml do folderu projektu.

Aby odczytać dane XML z pliku, wykonaj następujące kroki:

  1. Uruchom program Visual Studio .NET 2002, Visual Studio .NET 2003 lub Visual Studio 2005.

  2. W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.

    Zostanie wyświetlone okno dialogowe Nowy projekt.

  3. W obszarze Typy projektów kliknij pozycję Projekty Visual C++.

    Uwaga

    W programie Visual Studio 2005 projekty Visual C++ są zmieniane na Visual C++.

  4. W obszarze Szablony kliknij pozycję Zarządzana aplikacja C++ , jeśli używasz programu Visual Studio .NET 2002.

    W obszarze Szablony kliknij pozycję Aplikacja konsolowa (.NET), jeśli używasz programu Visual Studio .NET 2003.

    W obszarze Szablony kliknij pozycję Aplikacja konsoli CLR , jeśli używasz programu Visual Studio 2005.

  5. W polu Nazwa wpisz Q815658, a następnie kliknij przycisk OK.

  6. Dodaj odwołanie do System.xml.dll elementu w projekcie. Aby uzyskać więcej informacji na temat dodawania odwołań do zarządzanego projektu Visual C++, zobacz Dodawanie odwołań do zarządzanego projektu Visual C++

  7. Określ dyrektywę using w przestrzeni nazw w System::Xml następujący sposób:

    using namespace System::Xml;
    

    W ten sposób nie trzeba kwalifikować deklaracji klas w dalszej XmlTextReader części kodu. Należy użyć dyrektywy using przed innymi deklaracjami.

  8. Utwórz wystąpienie obiektu XmlTextReader . Wypełnij XmlTextReader obiekt plikiem .xml.

    Zazwyczaj klasa jest używana, XmlTextReader jeśli musisz uzyskać dostęp do nieprzetworzonych danych XML bez narzutu modelu DOM. W związku z XmlTextReader tym klasa zapewnia szybszy sposób odczytywania danych XML. Klasa XmlTextReader ma inną constructors właściwość, która określa lokalizację danych XML.

    Poniższy kod tworzy wystąpienie klasy, XmlTextReader a następnie ładuje plik Books.xml . Dodaj następujący kod do _tmain funkcji:

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    Uwaga

    W programie Visual C++ 2005 _tmain funkcja zostanie zmieniona na funkcję główną.

  9. Odczytywanie danych XML.

    Uwaga

    Ten krok przedstawia zewnętrzną pętlę while . Dwa kroki, które wykonają ten krok, pokazują, jak używać pętli while do odczytywania danych XML.

    Po utworzeniu obiektu XmlTextReader użyj metody Read, aby odczytać dane XML.

    Metoda Read nadal sekwencyjnie przechodzi przez plik .xml, dopóki metoda Read nie dotrze do końca pliku. Gdy metoda Read osiągnie koniec pliku, metoda Read zwraca wartość false.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. Sprawdź węzły.

    Aby przetworzyć dane XML, każdy rekord ma typ węzła, który można określić na NodeType podstawie właściwości . Właściwość Name i właściwość Value zwracają następujące informacje dla bieżącego węzła lub bieżącego rekordu:

    • Nazwa węzła, która jest nazwą elementu i nazwą atrybutu.
    • Wartość węzła, która jest tekstem węzła.

    Wyliczenie NodeType określa typ węzła. Poniższy przykład kodu zawiera nazwę elementów i typ dokumentu. Poniższy przykład kodu ignoruje atrybuty elementów:

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  11. Sprawdź atrybuty.

    Typy węzłów elementu mogą zawierać listę węzłów atrybutów skojarzonych z typami węzłów elementu. Metoda MovetoNextAttribute sekwencyjnie przechodzi przez każdy atrybut w elemencie. Użyj właściwości , HasAttributes aby sprawdzić, czy węzeł ma jakiekolwiek atrybuty. Właściwość AttributeCount zwraca liczbę atrybutów dla bieżącego węzła.

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
    
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  12. Zapisz rozwiązanie. Skompiluj rozwiązanie.

  13. Naciśnij klawisze CTRL+F5, aby uruchomić przykładową aplikację.

Wyświetlanie pełnej listy kodu w programie Visual Studio .NET 2002 lub w programie Visual Studio .NET 2003

#include "stdafx.h"
#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
    XmlTextReader* reader = new XmlTextReader ("books.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
  
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}

Uwaga

Aby pomyślnie skompilować poprzedni przykład kodu, należy dodać opcję kompilatora środowiska uruchomieniowego języka wspólnego (/clr:oldSyntax) w programie Visual C++ 2005. Aby dodać opcję kompilatora obsługi środowiska uruchomieniowego języka wspólnego w programie Visual C++ 2005, wykonaj następujące kroki:

  1. Kliknij pozycję Projekt, a następnie kliknij pozycję <Właściwości projectname> .

    Uwaga

    <ProjectName> jest symbolem zastępczym nazwy projektu.

  2. Rozwiń węzeł Właściwości konfiguracji, a następnie kliknij pozycję Ogólne.

  3. Kliknij, aby wybrać pozycję Obsługa środowiska uruchomieniowego języka wspólnego, stara składnia (/clr:oldSyntax) w ustawieniu projektu obsługi środowiska uruchomieniowego języka wspólnego w okienku po prawej stronie, kliknij przycisk Zastosuj, a następnie kliknij przycisk OK.

    Aby uzyskać więcej informacji na temat opcji kompilatora obsługi środowiska uruchomieniowego języka wspólnego, zobacz /clr (Common Language Runtime Compilation).

Te kroki dotyczą całego artykułu.

Wyświetlanie przykładowych danych wyjściowych

<bookstore>
    <book genre='autobiography' publicationdate='1981' ISBN='1-861003-11-0'>
        <title>
        The Autobiography of Benjamin Franklin
        </title>
        <author>
            <first-name>
            Benjamin
            </first-name>
            <last-name>
            Franklin
            </last-name>
        </author>
        <price>
        8.99
        </price>
    </book>
    <book genre='novel' publicationdate='1967' ISBN='0-201-63361-2'>
        <title>
        The Confidence Man
        </title>
        <author>
            <first-name>
            Herman
            </first-name>
            <last-name>
            Melville
            </last-name>
        </author>
        <price>
        11.99
        </price>
    </book>
    <book genre='philosophy' publicationdate='1991' ISBN='1-861001-57-6'>
        <title>
        The Gorgias
        </title>
        <author>
            <name>
            Plato
            </name>
        </author>
        <price>
        9.99
        </price>
    </book>
</bookstore>

Rozwiązywanie problemów

Po uruchomieniu przykładowej aplikacji może zostać wyświetlony następujący komunikat o błędzie:

Nieobsługiwany wyjątek typu System.Xml. XmlException wystąpił w System.xml.dll Dodatkowe informacje: Błąd systemu.

Informacje

Aby uzyskać więcej informacji na temat odczytywania kodu XML za pomocą elementu XmlReader, zobacz Reading XML with the XmlReader (Odczytywanie kodu XML za pomocą elementu XmlReader).