XPathNavigator sınıfıyla XML belgelerinde gezinmek için Visual C# kullanma

Bu makalede, bir nesneden XPathDocument oluşturulan bir XPathNavigator nesneyle XML belgelerinde nasıl gezinileceğini açıklar.

Orijinal ürün sürümü: Visual C#
Özgün KB numarası: 308343

Özet

Bu örnek, XML verileriyle bir XPathDocument nesneyi yükler, veriler üzerinde görünüm olarak bir XPathNavigator nesne oluşturur ve belge üzerinde ilerleyerek XML'yi görüntüler.

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

  • System.Xml
  • System.Xml.XPath

Bu makalenin Microsoft Visual Basic .NET sürümü için bkz. Visual Basic kullanarak XPathNavigator sınıfıyla XML'de gezinme.

Gereksinimler

Bu makalede, aşağıdaki konulara aşina olduğunuz varsayılır:

  • Visual C#
  • XML terminolojisi
  • XML dosyası oluşturma ve okuma
  • XML Yol Dili (XPath) söz dizimi

XML'de gezinmek için XPathNavigator sınıfını kullanma

  1. Visual Studio'da yeni bir Visual C# Konsol Uygulaması oluşturun.

    Not

    Bu örnekte Books.xmladlı bir dosya kullanılır. Kendi Books.xml dosyanızı oluşturabilir veya .NET Yazılım Geliştirme Seti (SDK) Hızlı Başlangıçları'na dahil edilen örneği kullanabilirsiniz. Hızlı Başlangıçlar yüklü değilse ve bunları yüklemek istemiyorsanız, Books.xml indirme konumu için Başvurular bölümüne bakın. Hızlı Başlangıçlar yüklüyse ,Books.xml aşağıdaki klasörde bulunur:
    \Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB

    Books.xml\Bin\Debug bu projeyi oluşturduğunuz klasörün altında bulunan klasöre kopyalayabilirsiniz.

  2. Projenin ad alanına başvurduğundan System.Xml emin olun.

  3. using Kodunuzda daha sonra bu ad alanlarına bildirimleri nitelemeniz gerekmeyecek şekilde ve XPath ad alanları üzerindeki deyimini Xml kullanın. deyimini using aşağıdaki gibi diğer bildirimlerden önce kullanabilirsiniz:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Uygun değişkenleri bildirin. XML belgesini tutacak bir XPathDocument nesne ve ifadeleri değerlendirmek XPath ve belgede gezinmek için bir XPathNavigator nesne bildirin. İfadeyi tutmak için bir String nesne bildirin XPath . Modül1'deki yordama Main bildirim kodunu ekleyin.

    XPathNavigator nav;
    XPathDocument docNav;
    
  5. Books.xmlörnek dosyasıyla bir XPathDocument nesne yükleyin. sınıfı, XPathDocument XML belge işleme için hızlı ve performans odaklı bir önbellek sağlamak için Genişletilebilir Stil Sayfası Dil Dönüşümleri 'ni (XSLT) kullanır. XML Belge Nesne Modeli'ne (DOM) benzer ancak XSLT işleme ve XPath veri modeli için son derece iyileştirilmiştir.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Belgeden bir XPathNavigator nesne oluşturun. XPathNavigator bir XML belgesindeki hem öznitelik düğümleri hem de ad alanı düğümleri arasında hareket etmenizi sağlar.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. yöntemiyle belgenin köküne MoveToRoot gitme. MoveToRoot gezgin, düğüm ağacının tamamını içeren belge düğümüne ayarlar.

    //Initial XPathNavigator to start at the root.
    nav.MoveToRoot();
    
  8. XML belgesinin MoveToFirstChild alt öğelerine gitmek için yöntemini kullanın. MoveToFirstChild yöntemi geçerli düğümün ilk alt öğesine taşınır. Books.xml kaynağı varsa kök belgeden alt öğelere, Açıklama bölümüne ve Kitap deposu düğümüne geçiyorsunuz demektir.

    //Move to the first child node (comment field).
    nav.MoveToFirstChild();
    
  9. Eşdüzey düzeyde düğümler MoveToNext arasında yineleme yapmak için yöntemini kullanın. yöntemi geçerli MoveToNext düğümün bir sonraki eşdüzeyine taşınır.

    //Loop through all of the root nodes.
    do
    {
    } while (nav.MoveToNext());
    
  10. NodeType Yalnızca öğe düğümlerini işlediğinizden emin olmak için özelliğini kullanın ve öğesinin Value metin gösterimini görüntülemek için özelliğini kullanın.

    do
    {
       //Find the first element.
       if (nav.NodeType == XPathNodeType.Element)
       {
            //Determine whether children exist.
            if (nav.HasChildren == true)
            {
                //Move to the first child.
                nav.MoveToFirstChild();
    
                //Loop through all the children.
                do
                {
                    //Display the data.
                    Console.Write("The XML string for this child ");
                    Console.WriteLine("is '{0}'", nav.Value);
                } while (nav.MoveToNext());
            }
        }
    } while (nav.MoveToNext());
    
  11. Bir düğümün HasAttributes öznitelikleri olup olmadığını belirlemek için özelliğini kullanın. Bir özniteliğe gitmek ve değerini incelemek için gibi MoveToNextAttributediğer yöntemleri de kullanabilirsiniz.

    Not

    Bu kod kesimi yalnızca kök düğümün alt öğelerinde yol gösterir ve tüm ağaçta değil.

    do
    {
       //Find the first element.
       if (nav.NodeType == XPathNodeType.Element)
       {
            //if children exist
            if (nav.HasChildren == true)
            {
                //Move to the first child.
                nav.MoveToFirstChild();
                //Loop through all the children.
                do
                {
                    //Display the data.
                    Console.Write("The XML string for this child ");
                    Console.WriteLine("is '{0}'", nav.Value);
    
                    //Check for attributes.
                    if (nav.HasAttributes == true)
                    {
                        Console.WriteLine("This node has attributes");
                    }
                } while (nav.MoveToNext());
            }
        }
    } while (nav.MoveToNext());
    
  12. ReadLine Yukarıdaki sonuçları daha hazır bir şekilde görüntülemek için konsol ekranının sonuna bir duraklama eklemek için nesnesinin yöntemini Console kullanın.

    //Pause.
    Console.ReadLine();
    
  13. Visual C# projesini derleyin ve çalıştırın.

Tam kod listesi

using System;
using System.Xml;
using System.Xml.XPath;

namespace q308343
{
    class Class1
    {
        static void Main(string[] args)
        {
            XPathNavigator nav;
            XPathDocument docNav;

            docNav = new XPathDocument(@"c:\books.xml");
            nav = docNav.CreateNavigator();
            nav.MoveToRoot();

            //Move to the first child node (comment field).
            nav.MoveToFirstChild();

            do
            {
                //Find the first element.
                if (nav.NodeType == XPathNodeType.Element)
                {
                    //Determine whether children exist.
                    if (nav.HasChildren == true)
                    {
                        //Move to the first child.
                        nav.MoveToFirstChild();
                        //Loop through all of the children.
                        do
                        {
                            //Display the data.
                            Console.Write("The XML string for this child ");
                            Console.WriteLine("is '{0}'", nav.Value);
                            //Check for attributes.
                            if (nav.HasAttributes == true)
                            {
                                Console.WriteLine("This node has attributes");
                            }
                        } while (nav.MoveToNext());
                    }
                }
            } while (nav.MoveToNext());
            //Pause.
            Console.ReadLine();
        }
    }
}

Sorun giderme

Kodu test ettiğinizde aşağıdaki özel durum hata iletisini alabilirsiniz:

System.Xml türünde işlenmeyen bir özel durum. XmlException, system.xml.dll
Ek bilgi: Beklenmeyen XML bildirimi. XML bildirimi belgedeki ilk düğüm olmalıdır ve ondan önce boşluk karakterlerinin görünmesine izin verilmez. 1. Satır, konum

Özel durum hatası aşağıdaki kod satırında oluşur:

docNav = new XPathDocument("c:\\books.xml");

Hatayı çözmek için, books.xml belgedeki ilk düğümün önündeki boşluk karakterlerini kaldırın.

Başvurular