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:
Uruchom program Visual Studio .NET 2002, Visual Studio .NET 2003 lub Visual Studio 2005.
W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.
Zostanie wyświetlone okno dialogowe Nowy projekt.
W obszarze Typy projektów kliknij pozycję Projekty Visual C++.
Uwaga
W programie Visual Studio 2005 projekty Visual C++ są zmieniane na Visual C++.
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.
W polu Nazwa wpisz Q815658, a następnie kliknij przycisk OK.
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++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.Utwórz wystąpienie obiektu
XmlTextReader
. WypełnijXmlTextReader
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 zXmlTextReader
tym klasa zapewnia szybszy sposób odczytywania danych XML. KlasaXmlTextReader
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ą.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); }
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; } }
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; } }
Zapisz rozwiązanie. Skompiluj rozwiązanie.
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:
Kliknij pozycję Projekt, a następnie kliknij pozycję <Właściwości projectname> .
Uwaga
<ProjectName> jest symbolem zastępczym nazwy projektu.
Rozwiń węzeł Właściwości konfiguracji, a następnie kliknij pozycję Ogólne.
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).
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla