Visual C++ kullanarak dosyadan XML verilerini okuma

Bu makalede, bir dosyadan XmlTextReader XML verilerini okumak için sınıfının nasıl kullanılacağı gösterilmektedir.

Orijinal ürün sürümü: Visual C++
Özgün KB numarası: 815658

Özet

Bu makalede, bir dosyadan XmlTextReader XML verilerini okumak için sınıfının nasıl kullanılacağı açıklanmaktadır. sınıfı, XmlTextReader XML verilerinin doğrudan ayrıştırma ve belirteç haline getirmesini sağlar. XmlTextReader sınıfı, World Wide Web Consortium (W3C) tarafından tanımlanan XML belirtiminde ad alanlarına ek olarak XML 1.0 belirtimini de uygular. Bu makalede, XML Belge Nesne Modeli (DOM) gibi bir nesne modeli kullanmak yerine XML verilerine hızlı, belirteçli akış erişiminin nasıl gerçekleştirildiği açıklanır.

Bu makalenin Microsoft Visual C# .NET sürümü için bkz. Visual C# kullanarak dosyadan XML okuma.

Bu makale, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanını ifade eder:System.xml

Gereksinimler

Bu makalede, aşağıdaki konular hakkında bilgi sahibi olduğunuz varsayılır:

  • XML terminolojisi
  • XML dosyası oluşturma ve okuma

Aşağıdaki listede ihtiyacınız olan önerilen donanım, yazılım, ağ altyapısı ve hizmet paketleri özetlenmiştir:

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Dosyadan XML verilerini okuma

Bu makaledeki örnekte Books.xmladlı bir dosya kullanılır. Kendi Books.xml dosyanızı oluşturabilir veya Microsoft .NET Yazılım Geliştirme Seti (SDK) Hızlı Başlangıçları'na dahil edilen örnek dosyayı kullanabilirsiniz. Books.xml dosyasını proje klasörüne kopyalamanız gerekir.

Bir dosyadan XML verilerini okumak için şu adımları izleyin:

  1. Visual Studio .NET 2002, Visual Studio .NET 2003 veya Visual Studio 2005'i başlatın.

  2. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklayın.

    Yeni Proje iletişim kutusu görüntülenir.

  3. Proje Türleri'nin altında Visual C++ Projeleri'ne tıklayın.

    Not

    Visual Studio 2005'te , Visual C++ ProjeleriVisual C++ olarak değiştirilir.

  4. Visual Studio .NET 2002 kullanıyorsanız Şablonlar altında Yönetilen C++ Uygulaması'nı tıklatın.

    Visual Studio .NET 2003 kullanıyorsanız Şablonlar altında Konsol Uygulaması (.NET) öğesine tıklayın.

    Visual Studio 2005 kullanıyorsanız Şablonlar altında CLR Konsol Uygulaması'nı tıklatın.

  5. Ad kutusuna Q815658 yazıp Tamam'a tıklayın.

  6. Projeye bir başvuru System.xml.dll ekleyin. Yönetilen Visual C++ projesine başvuru ekleme hakkında daha fazla bilgi için bkz. Yönetilen Visual C++ projesine başvuru ekleme

  7. Ad alanında using yönergesini System::Xml aşağıdaki gibi belirtin:

    using namespace System::Xml;
    

    Bunu, kodunuzun ilerleyen bölümlerinde sınıf bildirimlerini nitelemeniz XmlTextReader gerekmemesi için yaparsınız. Diğer bildirimlerden önce using yönergesini kullanmanız gerekir.

  8. Nesnesinin bir örneğini XmlTextReader oluşturun. XmlTextReader nesneyi .xml dosyasıyla doldurun.

    Genellikle, XmlTextReader DOM yükü olmadan ham XML verilerine erişmeniz gerekiyorsa sınıfı kullanılır. Bu nedenle, XmlTextReader sınıfı XML verilerini okumak için daha hızlı bir yol sağlar. sınıfı, XmlTextReader XML verilerinin konumunu belirten farklı constructors bir değere sahiptir.

    Aşağıdaki kod sınıfının bir örneğini XmlTextReader oluşturur ve ardındanBooks.xml dosyasını yükler. İşleve _tmain aşağıdaki kodu ekleyin:

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

    Not

    Visual C++ 2005'te _tmain işlev ana işlev olarak değiştirilir.

  9. XML verilerini okuyun.

    Not

    Bu adımda bir dış while döngüsü gösterilmektedir. Bu adımı izleyen iki adım, XML verilerini okumak için while döngüsünün nasıl kullanılacağını gösterir.

    Nesneyi oluşturduktan XmlTextReader sonra, XML verilerini okumak için Read yöntemini kullanın.

    Read yöntemi, Read yöntemi dosyanın sonuna ulaşana kadar .xml dosyasında sırayla hareket etmeye devam eder. Read yöntemi dosyanın sonuna ulaştığında Read yöntemi false döndürür.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. Düğümleri inceleyin.

    XML verilerini işlemek için her kaydın özelliğinden NodeType belirlenebilen bir düğüm türü vardır. Name özelliği ve Value özelliği, geçerli düğüm veya geçerli kayıt için aşağıdaki bilgileri döndürür:

    • Öğe adı ve öznitelik adı olan düğüm adı.
    • Düğüm metni olan düğüm değeri.

    Sabit NodeType listesi düğüm türünü belirler. Aşağıdaki kod örneği, öğelerin adını ve belge türünü görüntüler. Aşağıdaki kod örneği öğe özniteliklerini yoksayar:

    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. Öznitelikleri inceleyin.

    Öğe düğümü türleri, öğe düğümü türleriyle ilişkili öznitelik düğümlerinin listesini içerebilir. yöntemi, MovetoNextAttribute öğesindeki her öznitelikte sırayla hareket eder. Düğümde HasAttributes öznitelik olup olmadığını test etmek için özelliğini kullanın. özelliği, AttributeCount geçerli düğüm için öznitelik sayısını döndürür.

    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. Çözümü kaydedin. Çözümü oluşturun.

  13. Örnek uygulamayı çalıştırmak için CTRL+F5 tuşlarına basın.

Visual Studio .NET 2002 veya Visual Studio .NET 2003'te kod listesinin tamamını görüntüleme

#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();
}

Not

Önceki kod örneğini başarıyla derlemek için Visual C++ 2005'te ortak dil çalışma zamanı desteği derleyici seçeneğini (/clr:oldSyntax) eklemeniz gerekir. Visual C++ 2005'te ortak dil çalışma zamanı desteği derleyici seçeneğini eklemek için şu adımları izleyin:

  1. Project'e ve ardından ProjectName> Özellikleri'ne tıklayın<.

    Not

    <ProjectName> , projenin adı için bir yer tutucudur.

  2. Yapılandırma Özellikleri'ni genişletin ve genel'e tıklayın.

  3. Sağ bölmedeki Ortak Dil Çalışma Zamanı destek projesi ayarında Ortak Dil Çalışma Zamanı Desteği, Eski Söz Dizimi (/clr:oldSyntax) öğesini seçmek için tıklayın, Uygula'ya ve ardından Tamam'a tıklayın.

    Ortak dil çalışma zamanı desteği derleyici seçeneği hakkında daha fazla bilgi için bkz. /clr (Ortak Dil Çalışma Zamanı Derlemesi).

Bu adımlar makalenin tamamı için geçerlidir.

Örnek çıkışı görüntüleme

<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>

Sorun giderme

Örnek uygulamayı çalıştırdığınızda aşağıdaki hata iletisini alabilirsiniz:

System.Xml türünde işlenmeyen bir özel durum. XmlException, System.xml.dll Ek bilgi: Sistem hatasında oluştu.

Başvurular

XmlReader ile XML okuma hakkında daha fazla bilgi için bkz. XmlReader ile XML Okuma.