Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
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 16.
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 konsolowa 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ć
XmlTextReader
deklaracji klas w dalszej części kodu. Należy użyć dyrektywy using przed wszelkimi innymi deklaracjami.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 tymXmlTextReader
klasa zapewnia szybszy sposób odczytywania danych XML. KlasaXmlTextReader
ma inneconstructors
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.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); }
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
iValue
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; } }
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; } }
Zapisz rozwiązanie. Stwórz rozwiązanie.
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:
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.
Rozwiń węzeł Właściwości konfiguracji, a następnie kliknij przycisk Ogólne.
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.