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.XPath
ifade 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
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.
- 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
Projenin ad alanına başvurduğundan
System.Xml
emin olun.using
Kodunuzda daha sonra bu ad alanlarına bildirimleri nitelemeniz gerekmeyecek şekilde veXPath
ad alanları üzerindeki deyiminiXml
kullanın. deyiminiusing
aşağıdaki gibi diğer bildirimlerden önce kullanabilirsiniz:using System.Xml; using System.Xml.XPath;
Uygun değişkenleri bildirin. XML belgesini tutacak bir
XPathDocument
nesne, XPath ifadelerini değerlendirmek için birXpathNavigator
nesne ve seçili düğümler arasında yinelemek için birXPathNodeIterator
nesne bildirin. XPath ifadelerini tutmak için birString
nesne bildirin. içindeki işlevineMain
Class1
bildirim kodunu ekleyin.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Ö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 veXPath
veri modeli için yüksek oranda iyileştirilmiştir.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
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();
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)";
Evaluate
XPath ifadesini değerlendirmek için nesnesinin yönteminiXPathNavigator
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));
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]";
yöntemiyle
Select
XPathNavigator
seçilen düğümler için birXPathNodeIterator
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);
Seçili düğümler
XPathNodeIterator
arasında ilerlemek için yöntemindenSelect
XPathNavigator
döndürülen öğesini kullanın. Bu durumda, tüm seçili düğümler arasında yineleme yapmak için yönteminiXPathNodeIterator
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); };
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();
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin