XPath ifadesiyle XML sorgulamak için Visual C# kullanma

Bu makalede, sınıfını kullanarak XML XPathDocument Yol Dili (XPath) ifadesiyle bir nesnenin nasıl sorgulandığı anlatılıyor XPathNavigator .

Orijinal ürün sürümü: Visual Studio, .NET Framework
Özgün KB numarası: 308333

Özet

XPath, ifadeleri değerlendirmek ve 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ını System.Xml.XPathifade eder.

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 ifadesiyle XML sorgulama

  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ında bulunan ö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, dosya klasörde bulunabilir Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB . Dosyayı \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, 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. içindeki işlevine MainClass1bildirim kodunu ekleyin.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Örnek dosya Books.xml ile 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üşümleri 'ni (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 bölümü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. yöntemiyle SelectXPathNavigatorseçilen düğümler için bir XPathNodeIterator oluşturun. XPathNodeIterator bir 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 XPathNodeIteratorarasında ilerlemek için yönteminden SelectXPathNavigatordöndürülen öğesini kullanın. Bu durumda, tüm seçili düğümler arasında yineleme yapmak için yöntemini XPathNodeIterator kullanabilirsinizMoveNext.

    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 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 yöntemini kullanın.

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

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

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

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

Özel durum hatası geçersiz bir işleme yönergesi nedeniyle oluştu. Ö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.

Başvurular