Visual C'de XPath ifadesiyle XML sorgulama#

Bu makalede, XML Yol Dili (XPath) ifadesi ve sınıfı kullanılarak bir nesnenin nasıl sorgulandığı XPathDocumentXPathNavigator açıklanır.

XPath, ifadeleri değerlendirmek ve bir belgedeki belirli düğümleri seçmek için program aracılığıyla kullanılır.

Bu makale, Microsoft .NET Framework Sınıf Kitaplığı ad alanı olan System.Xml.XPathöğesine başvurur.

Şunlar için geçerlidir: Visual Studio, .NET Framework

Özgün KB numarası: 308333

Önkoşullar

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

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

XPath ifadesine sahip XPathDocument'i sorgula

  1. Microsoft Visual Studio'da 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 "İlgili içerik" bölümüne bakın.

    Hızlı başlangıçları yüklediyseniz, Books.xml dosyası klasörde Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB bulunabilir. Dosyayı \Bin\Debug , bu projeyi oluşturduğunuz klasörün alt klasörüne kopyalayabilirsiniz.

  2. Projenin ad alanına başvurduğunu System.Xml doğrulayın.

  3. using Kodunuzda daha sonra bu ad alanlarına ilişkin bildirimleri nitelemeniz gerekmeyecek şekilde ve Xml ad alanları üzerindeki deyimini XPath 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, XPath ifadelerini değerlendirmek için bir XpathNavigator nesne ve seçili düğümler arasında yinelemek için bir XPathNodeIterator nesne bildirin. XPath ifadelerini tutmak için bir String nesne bildirin. Class1 içindeki Main işlevine bildirim kodunu ekleyin.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Books.xmlörnek dosyayla birlikte bir XPathDocument 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üştürmeleri (XSLT) kullanır. XML Belge Nesne Modeli'ne (DOM) benzer ancak XSLT işleme ve XPath veri modeli için yüksek oranda iyileştirilmiştir.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Belgeden bir XPathNavigator oluşturun. XPathNavigator nesnesi salt okunur XPath sorguları için kullanılır. XPath sorguları sonuçta elde edilen bir değer veya birçok düğüm döndürebilir.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Bir kitabın ortalama maliyetini bulmak için bir XPath ifadesi oluşturun. Bu XPath ifadesi tek bir değer döndürür. XPath söz dizimi hakkında tüm ayrıntılar için "Başvurular" bölümündeki XPath Söz Dizimi'ne bakın.

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Evaluate XPath ifadesini değerlendirmek için nesnesinin yöntemini XPathNavigator kullanın. yöntemi, Evaluate ifadenin sonuçlarını döndürür.

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. 10 dolardan daha pahalı olan tüm kitapları bulmak için bir XPath ifadesi oluşturun. Bu XPath ifadesi yalnızca XML kaynağındaki Başlık düğümlerini döndürür.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. Seçilen düğümlerle birlikte XPathNavigator'nin Select yöntemi ile bir XPathNodeIterator oluşturun. bir XPathNodeIterator XPath düğüm kümesini temsil eder ve bu düğüm kümesindeki işlemleri destekler.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Seçili düğümler arasında gezinmek için XPathNavigator yöntemiyle döndürülen Select öğesini ve XPathNodeIterator kullanın. Bu durumda, XPathNodeIterator nesnesinin MoveNext yöntemini tüm seçili düğümler arasında yineleme yapmak için kullanabilirsiniz.

    Console.WriteLine("List of expensive books:");
    //Iterate through the results showing the element value.
    while (NodeIter.MoveNext())
    {
        Console.WriteLine("Book Title: {0}", NodeIter.Current.Value);
    };
    
  12. ReadLine yöntemini kullanarak önceki adımlardan gelen sonuçları daha kolay görüntüleyebilmek için konsol ekranının sonuna bir duraklama ekleyin.

    // Pause
    Console.ReadLine();
    
  13. Projenizi derleyin ve çalıştırın.

    Not

    Sonuçlar konsol penceresinde görüntülenir.

Sorun giderme

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

An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll  
Additional information: System error.

Bu özel durum aşağıdaki kod satırında oluşur:

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

Hataya geçersiz bir işleme yönergesi neden oluyor. Örneğin, işleme yönergesi gereksiz boşluklar içerebilir. Aşağıdaki örnek geçersiz bir işleme yönergesidir:

<?xml version='1.0' ?>

Özel durumu çözmek için aşağıdaki çözümlerden birini kullanın:

  • Geçersiz işleme yönergesini düzeltin. Aşağıdaki örnek geçerli bir işleme yönergesidir:

    <?xml version='1.0'?>
    
  • XML işleme yönergesini Books.xml dosyasından kaldırın.