Udostępnij za pośrednictwem


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, jak używać XmlTextReader klasy do odczytywania danych XML z pliku. Klasa XmlTextReader zapewnia bezpośrednie analizowanie i tokenizowanie 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 korzystania z modelu obiektów, takiego jak MODEL OBIEKTÓW DOKUMENTÓW XML (DOM).

Aby zapoznać się z wersją platformy .NET programu Microsoft Visual C# w tym artykule, 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#).

Ten artykuł dotyczy następującej przestrzeni nazw biblioteki klas programu Microsoft .NET Framework: System.xml

Wymagania

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

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

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

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Odczytywanie danych XML z pliku

W przykładzie w tym artykule jest używany plik o nazwie Books.xml. Możesz utworzyć własny plik Books.xml lub użyć przykładowego pliku dołączonego do przewodnika 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 16.

    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 konsolowa 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ć XmlTextReader deklaracji klas w dalszej części kodu. Należy użyć dyrektywy using przed wszelkimi innymi deklaracjami.

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

    Zazwyczaj klasa jest używana, XmlTextReader jeśli musisz uzyskać dostęp do nieprzetworzonych danych XML bez obciążenia modelu DOM. W związku z tym XmlTextReader klasa zapewnia szybszy sposób odczytywania danych XML. Klasa XmlTextReader ma inne constructors wartości, które określają lokalizację danych XML.

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

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

    Uwaga 16.

    W programie Visual C++ 2005 _tmain funkcja jest zmieniana na funkcję main.

  9. Odczytywanie danych XML.

    Uwaga 16.

    W tym kroku przedstawiono zewnętrzną pętlę while . W dwóch krokach, które są wykonywane w tym kroku, pokazano, jak odczytywać dane XML przy użyciu pętli while .

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

    Metoda Read kontynuuje sekwencyjnie przechodzi przez plik .xml, aż metoda Read osiągnie koniec 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. Zbadaj węzły.

    Aby przetworzyć dane XML, każdy rekord ma typ węzła, który można określić z NodeType właściwości . Właściwość Name i Value właściwość 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ładowy kod wyświetla nazwę elementów i typ dokumentu. Poniższy przykładowy kod ignoruje atrybuty elementu:

    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 elementów mogą zawierać listę węzłów atrybutów skojarzonych z typami węzłów elementów. Metoda MovetoNextAttribute sekwencyjnie przechodzi przez każdy atrybut w elemencji. HasAttributes Użyj właściwości , 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. Stwórz rozwiązanie.

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

Wyświetl pełną listę 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 16.

Aby pomyślnie skompilować poprzedni przykładowy kod, należy dodać opcję kompilatora obsługi języka wspólnego () w/clr:oldSyntax 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ę Project (Projekt), a następnie kliknij pozycję< ProjectName Properties (Właściwości projectname>).

    Uwaga 16.

    <ProjectName> to symbol zastępczy nazwy projektu.

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

  3. Kliknij, aby wybrać opcję Obsługa środowiska uruchomieniowego języka wspólnego, stara składnia (/clr:oldSyntax) w ustawieniu projektu ś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 (kompilacja środowiska uruchomieniowego języka wspólnego).

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:

Wystąpił nieobsługiwany wyjątek typu System.Xml.XmlException 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 Odczytywanie kodu XML za pomocą elementu XmlReader.