Jak odczytywać dane XML z pliku przy użyciu Visual C++


Wersja programu Microsoft Visual C# .NET niniejszego artykułu dla
307548 .

Wersja tego artykułu do programu Microsoft Visual Basic .NET można zobaczyć
301225 .

W tym artykule odnosi się do następującej przestrzeni nazw biblioteki klas systemu Microsoft.NET Framework:

System.xml

W TYM ZADANIU

Streszczenie


W tym artykule opisano sposób użycia klasy do odczytywania danych XML z pliku. Klasy zapewnia bezpośredni analizowania i tokenizing danych XML. Z
Klasy implementuje specyfikacji XML 1.0, oprócz przestrzeni nazw, również w specyfikacji XML, który jest zdefiniowany przez World Wide Web Consortium (W3C). W tym artykule opisano sposób wykonywania szybkich, stokenizowana dostęp do strumienia danych XML, zamiast za pomocą modelu obiektów, takich jak XML Document Object Model (DOM).

Powrót do początku

Wymagania

W tym artykule założono, że czytelnik jest obeznany z następującymi zagadnieniami:
  • Terminologia dotycząca języka XML
  • Jak utworzyć i sposobu czytania pliku XML

Poniższej liście wyszczególniono zalecany sprzęt, oprogramowanie, infrastrukturę sieci i dodatki service pack, które są potrzebne:
  • Program Microsoft Visual Studio .NET
  • Program Microsoft Visual Studio 2005
Powrót do początku

Odczytać z pliku danych XML

W niniejszym przykładzie plik o nazwie Books.xml. Można utworzyć plik Books.xml, lub można użyć przykładowy plik, który jest dołączony Przewodniki Szybki Start systemu Microsoft .NET Software Development Kit (SDK). Plik Books.xml jest również dostępna do pobrania w Microsoft Download Center:Należy skopiować plik Books.xml do folderu projektu.


Do odczytywania danych 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 polecenie Projekt.

    Z
    Zostanie wyświetlone okno dialogowe Nowy projekt .
  3. W obszarze Project Typeskliknij Projektów Visual C++.

    Uwaga W programie Visual Studio 2005 Visual C++ projektów jest zmieniana na Visual C++.
  4. W obszarze Szablonykliknij przycisk
    Zarządzana aplikacja w języku C++ , jeśli używasz programu Visual Studio .NET 2002.

    W obszarze Szablonykliknij Aplikacji konsoli (.NET) , jeśli używasz programu Visual Studio .NET 2003.


    W obszarze Szablonykliknij przycisk CLR Console Application , 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 w projekcie. Aby uzyskać dodatkowe informacje dotyczące sposobu dodawania odwołania do zarządzanego projektu Visual C++, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

    310674 jak do: Dodaj odwołania do zarządzanego projektu Visual C++

  7. Określić, za pomocą dyrektywy w obszarze nazw System::Xml w następujący sposób:
    using namespace System::Xml;
    Umożliwia to tak, że nie trzeba określać deklaracji klasy XmlTextReader później w kodzie. Należy użyć using dyrektywa przed wszelkimi innymi deklaracjami.
  8. Tworzenie wystąpienia obiektu XmlTextReader . Wypełnić obiekt XmlTextReader z pliku XML.

    Zazwyczaj klasy jest używana, jeśli masz dostęp do danych pierwotnych XML bez zwiększania modelu DOM. W związku z tym klasy zapewnia szybszy sposób odczytywania danych XML. Klasy ma różne konstruktorów określić lokalizację danych XML.

    Poniższy kod tworzy instancję klasy , a następnie ładuje plik Books.xml. Dodaj następujący kod do funkcji _tmain :
    XmlTextReader* reader = new XmlTextReader ("books.xml");
    Uwaga W programie Visual C++ 2005 funkcja _tmain zostanie zmieniona do głównych funkcji.
  9. Czytaj dane XML.

    Uwaga W tym kroku pokazuje zewnętrzna, podczas gdy pętla. Dwa kroki, które należy wykonać ten krok przedstawiają sposoby użycia podczas pętli do odczytywania danych XML.

    Po utworzeniu obiektu XmlTextReader , należy użyć metody odczytu do odczytywania danych XML.

    Metody Read nadal sekwencyjnie przenieść za pomocą pliku .xml metody Read aż do końca pliku. Metody Read osiągnięciu końca pliku Read metoda zwraca wartość false.
    while (reader->Read()){
    // Do some work here on the data.
    Console::WriteLine(reader->Name);
    }
  10. Zbadać węzły.

    Aby przetwarzać dane XML, każdy rekord ma typ węzła, który można określić na podstawie NodeType właściwości. Właściwość Name i Value właściwość zwraca następujące informacje dla bieżącego węzła lub dla bieżącego rekordu:
    • Nazwa węzła jest nazwa elementu i nazwy atrybutu.
    • Wartość węzła jest tekst węzła.
    Wyliczenie NodeType Określa typ węzła. Poniższy przykładowy kod wyświetla nazwy elementów i typu dokumentu. Poniższy przykładowy kod powoduje ignorowanie 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 elementu może zawierać listę węzłów atrybutu, które są skojarzone z typów węzłów elementów. Metoda MovetoNextAttribute przechodzi kolejno przez każdego atrybutu w elemencie. Użyj Właściwość do sprawdzenia, czy węzeł ma żadnych atrybutów. 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. Tworzenie rozwiązania.
  13. Naciśnij kombinację klawiszy CTRL + F5, aby uruchomić aplikacji przykładowej.
Powrót do początku

Zobacz kompletny kod w programie Visual Studio .NET 2002 lub 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 Należy dodać opcję kompilatora obsługi środowiska wykonawczego języka wspólnego (/ CLR: oldsyntax) w programie Visual C++ 2005 pomyślnie skompilować powyższy kod przykładowy. Aby dodać opcję kompilatora obsługi środowiska wykonawczego języka wspólnego w programie Visual C++ 2005, wykonaj następujące kroki:

  1. Kliknij Projekt, a następnie kliknij przycisk < Nazwaprojektuwłaściwości >.



    Uwaga: < NazwaProjektu > jest symbolem zastępczym dla nazwy projektu.
  2. Rozwiń Właściwości konfiguracji, a następnie kliknij Ogólne.

  3. Kliknij, aby zaznaczyć Common Language Runtime Support, Old Syntax (/ CLR: oldsyntax) obsługuje aparatu plików wykonywalnych języka wspólnego projektu ustawienia w okienku po prawej stronie, kliknij przycisk Zastosuj, a następnie kliknij przycisk OK.

Aby uzyskać więcej informacji na temat aparatu plików wykonywalnych języka wspólnego obsługuje opcję kompilatora, odwiedź następującą witrynę firmy Microsoft w sieci Web:
/ CLR (kompilacja wspólne środowiska wykonawczego języka)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Te kroki dotyczą całego artykułu.

Powrót do początku

Wyświetl przykładowe dane wyjściowe

Uwaga Plik Books.xml, który jest dołączony do zestawu SDK platformy .NET Przewodniki Szybki Start ma dwie różnice z pliku Books.xml z łącze pobierania, który jest wymieniony w sekcji "Odczyt danych XML z pliku".
  • Plik Books.xml z łącze pobierania nie ma
    atrybut publicationdate .
  • Plik Books.xml z łącze pobierania nie ma
    Atrybut ISBN .
<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>
Powrót do początku

Rozwiązywanie problemów

Po uruchomieniu aplikacji przykładowej, 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
Informacje dodatkowe: błąd systemu.
Jeśli zostanie użyty plik Books.xml z łącze pobierania, który jest wymieniony w sekcji "Odczyt danych XML z pliku" może zostać wyświetlony ten komunikat o błędzie. Ten problem może wystąpić, jeśli plik Books.xml ma spacji na początku pliku. Aby rozwiązać ten problem, otwórz plik Books.xml za pomocą edytora tekstów, a następnie usuń odstęp.

Powrót do początku

Powiązane artykuły


Aby uzyskać dodatkowe informacje dotyczące odczytywania pliku XML z XmlReader odwiedź następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:Powrót do początku