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
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.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 ve ifadeleri değerlendirmekXPath
ve belgede gezinmek için birXPathNavigator
nesne bildirin. İfadeyi tutmak için birString
nesne bildirinXPath
. Modül1'deki yordamaMain
bildirim kodunu ekleyin.XPathNavigator nav; XPathDocument docNav;
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");
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();
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();
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();
Eşdüzey düzeyde düğümler
MoveToNext
arasında yineleme yapmak için yöntemini kullanın. yöntemi geçerliMoveToNext
düğümün bir sonraki eşdüzeyine taşınır.//Loop through all of the root nodes. do { } while (nav.MoveToNext());
NodeType
Yalnızca öğe düğümlerini işlediğinizden emin olmak için özelliğini kullanın ve öğesininValue
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());
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 gibiMoveToNextAttribute
diğ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());
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önteminiConsole
kullanın.//Pause. Console.ReadLine();
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
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