C# XML Okuma

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda XML okumayı anlatacağım. Hadi başlayalım !
Table of Contents
XML (Extensible Markup Language), verileri yapılandırılmış bir şekilde saklamak için kullanılan bir işaretleme dilidir. C# programlama dili ile XML dosyaları okumak oldukça kolaydır. Bu makalede, C# kullanarak XML dosyalarını nasıl okuyabileceğinizi anlatacağım.
XML dosyası okumak için, System.Xml namespace’ini kullanmanız gerekiyor. Bu namespace, C# programlama dili tarafından sağlanan XML işleme özelliklerini içerir.
Yol Haritası
XML dosyasını okumak için aşağıdaki adımları takip edebilirsiniz:
- XML dosyasının yolu belirlenir.
- XML dosyası XmlReader sınıfı kullanılarak açılır.
- XmlReader, XML dosyasındaki her bir düğümü okur ve ilgili verileri çeker.
- XmlReader, dosya sonuna ulaştığında kapatılır.
XML Dosyasını Okuma
Aşağıdaki örnek, C# kullanarak XML dosyasını okumak için basit bir yöntem sunmaktadır:
using System.Xml;
// XML dosyasının yolu belirlenir
string xmlFilePath = @"C:\Users\KullanıcıAdı\Documents\data.xml";
// XML dosyası XmlReader sınıfı kullanılarak açılır
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
// Her bir düğümü okuyarak verileri çekiyoruz
while (reader.Read())
{
// Eğer düğüm element ise, element ismini yazdırıyoruz
if (reader.NodeType == XmlNodeType.Element)
Console.WriteLine(reader.Name);
// Eğer düğüm text ise, text değerini yazdırıyoruz
else if (reader.NodeType == XmlNodeType.Text)
Console.WriteLine(reader.Value);
}
}
Bu kodu anlamak için, kodu adım adım açıklayalım:
- İlk olarak, XML dosyasının yolu belirlenir. Bu örnek kodda, dosya yolu “C:\Users\KullanıcıAdı\Documents\data.xml” olarak belirlenmiştir.
- Ardından, XML dosyası XmlReader sınıfı kullanılarak açılır. XmlReader.Create() metodu, belirtilen dosya yolu için bir XmlReader nesnesi oluşturur.
- XmlReader, while döngüsü kullanılarak okunur. Döngü, XML dosyasındaki her bir düğümü okur ve ilgili verileri çeker.
- Döngü içerisinde, öncelikle düğümün element olup olmadığı kontrol edilir. Eğer düğüm element ise, element ismi Console.WriteLine() metodu ile ekrana yazdırılır.
- Eğer düğüm text ise, düğümün içeriği olan text değeri Console.WriteLine() metodu ile ekrana yazdırılır.
- XmlReader, dosyanın sonuna ulaştığında kapatılır.
Bu kod, XML dosyasındaki tüm elementleri ve text değerlerini okuyarak konsol ekranında gösterir.
Yukarıdaki örnek, XML dosyasındaki tüm elementleri ve text değerlerini okur. Ancak, bazen sadece belirli bir element veya attribute değerlerine ihtiyacınız olabilir. Bu durumlarda, XmlReader sınıfının özelliklerini ve yöntemlerini kullanarak daha özelleştirilmiş bir XML okuma işlemi gerçekleştirebilirsiniz.
Element İçeriğini Okuma
Örneğin, aşağıdaki kod XML dosyasındaki belirli bir element’in içeriğini okur:
using System.Xml;
// XML dosyasının yolu belirlenir
string xmlFilePath = @"C:\Users\KullanıcıAdı\Documents\data.xml";
// XML dosyası XmlReader sınıfı kullanılarak açılır
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
// İstenilen element'e ulaşana kadar okumaya devam ediyoruz
while (reader.Read())
{
// Eğer istenilen element'e ulaşılmışsa, element içeriğini yazdırıyoruz
if (reader.Name == "username")
{
Console.WriteLine(reader.ReadInnerXml());
break;
}
}
}
Bu kodu anlamak için, kodu adım adım açıklayalım:
- İlk olarak, XML dosyasının yolu belirlenir. Bu örnek kodda, dosya yolu “C:\Users\KullanıcıAdı\Documents\data.xml” olarak belirlenmiştir.
- Ardından, XML dosyası XmlReader sınıfı kullanılarak açılır. XmlReader.Create() metodu, belirtilen dosya yolu için bir XmlReader nesnesi oluşturur.
- Döngü içerisinde, XmlReader.Read() metodu ile XML dosyasındaki her bir düğüm okunur.
- Eğer düğümün ismi “username” ise, XmlReader.ReadInnerXml() metodu ile element’in içeriği okunur ve Console.WriteLine() metodu ile ekrana yazdırılır.
- Döngü, istenilen element’e ulaşıldığında durdurulur.
Element Attribute Okuma
Ayrıca, XML dosyasındaki belirli bir attribute değerini okumak için de XmlReader sınıfının GetAttribute() yöntemini kullanabilirsiniz. Aşağıdaki örnek, XML dosyasındaki “id” attribute değerini okur:
using System.Xml;
// XML dosyasının yolu belirlenir
string xmlFilePath = @"C:\Users\KullanıcıAdı\Documents\data.xml";
// XML dosyası XmlReader sınıfı kullanılarak açılır
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
// İstenilen element'e ulaşana kadar okumaya devam ediyoruz
while (reader.Read())
{
// Eğer istenilen element'e ulaşılmışsa, "id" attribute değerini yazdırıyoruz
if (reader.Name == "user" && reader.NodeType == XmlNodeType.Element)
{
string id = reader.GetAttribute("id");
Console.WriteLine(id);
}
}
}
Bu kodu anlamak için, kodu adım adım açıklayalım:
- İlk olarak, XML dosyasının yolu belirlenir. Bu örnek kodda, dosya yolu “C:\Users\KullanıcıAdı\Documents\data.xml” olarak belirlenmiştir.
- Ardından, XML dosyası XmlReader sınıfı kullanılarak açılır. XmlReader.Create() metodu, belirtilen dosya yolu için bir XmlReader nesnesi oluşturur.
- Döngü içerisinde, XmlReader.Read() metodu ile XML dosyasındaki her bir düğüm okunur.
- Eğer düğümün ismi “user” ise ve düğümün tipi “Element” ise, XmlReader.GetAttribute() metodu ile “id” attribute değeri okunur ve Console.WriteLine() metodu ile ekrana yazdırılır.
Web Servisten Okuma
Bu örneklerde, XML dosyası belirtilen dosya yolundan okunur. Ancak, bazen XML verileri farklı kaynaklardan okunabilir. Örneğin, bir web servisi ile iletişim kurarak XML verileri alabilirsiniz. XmlReader sınıfı, XML verilerini çeşitli kaynaklardan okumak için de kullanılabilir. Örneğin, aşağıdaki kod bir web servisinden XML verilerini okur:
using System.Xml;
using System.Net;
// Web servisinin URL'si belirlenir
string serviceUrl = "https://example.com/webservice";
// Web servisinden XML verileri okumak için WebClient sınıfı kullanılır
using (WebClient client = new WebClient())
{
// XML verileri okunur
string xmlData = client.DownloadString(serviceUrl);
// Okunan XML verileri XmlReader sınıfı kullanılarak okunur
using (XmlReader reader = XmlReader.Create(new StringReader(xmlData)))
{
// İstenilen element'e ulaşana kadar okumaya devam ediyoruz
while (reader.Read())
{
// Eğer istenilen element'e ulaşılmışsa, element içeriğini yazdırıyoruz
if (reader.Name == "username")
{
Console.WriteLine(reader.ReadInnerXml());
break;
}
}
}
}
Bu kodu anlamak için, kodu adım adım açıklayalım:
- İlk olarak, web servisinin URL’si belirlenir. Bu örnek kodda, URL “https://example.com/webservice” olarak belirlenmiştir.
- Ardından, WebClient sınıfı kullanılarak web servisine istek gönderilir ve web servisinden gelen XML verileri string olarak okunur.
- Okunan XML verileri, XmlReader sınıfı kullanılarak okunur. Bu örnek kodda, XmlReader.Create() metodu, bir StringReader nesnesi kullanarak XML verilerini okur.
- Döngü içerisinde, XmlReader.Read() metodu ile XML dosyasındaki her bir düğüm okunur.
- Eğer düğümün ismi “username” ise, XmlReader.ReadInnerXml() metodu ile element’in içeriği okunur ve Console.WriteLine() metodu ile ekrana yazdırılır.
XML verileri okunurken dikkat edilmesi gereken bazı noktalar vardır. Örneğin, bir XML dosyasında aynı isimde birden fazla element olabilir. Bu durumda, belirli bir element’e ulaşmak için XML dosyasını dikkatlice okumak gerekebilir. Ayrıca, XML dosyasındaki düğümlerin tipine (Element, Attribute, Text, vb.) dikkat etmek de önemlidir. Örneğin, XmlReader.Read() metodu, düğüm tipi Attribute ise otomatik olarak sonraki düğüme geçer ve düğüm içeriğini okumaz. Bu durumda, XmlReader.MoveToContent() metodu kullanarak düğüm içeriğine geçmek gerekebilir.
Attribute ve Text Değerlerini Okuma
Aşağıdaki örnek kod, bir XML dosyasındaki Attribute ve Text düğümlerini okur:
using System.Xml;
// XML dosyasının yolu belirlenir
string xmlFilePath = "C:\\Users\\KullanıcıAdı\\Documents\\data.xml";
// XmlReader sınıfı kullanılarak XML dosyası açılır
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
// İstenilen element'e ulaşana kadar okumaya devam ediyoruz
while (reader.Read())
{
// Eğer düğüm tipi Element ise
if (reader.NodeType == XmlNodeType.Element)
{
// Eğer düğümün ismi "user" ise
if (reader.Name == "user")
{
// "id" attribute değerini okuyoruz
string userId = reader.GetAttribute("id");
// "username" element'inin içeriğini okuyoruz
reader.Read(); // "username" element'ine geçiyoruz
string userName = reader.ReadInnerXml();
// Sonuçları ekrana yazdırıyoruz
Console.WriteLine("User ID: " + userId);
Console.WriteLine("User Name: " + userName);
}
}
}
}
- İlk olarak, XML dosyasının yolu belirlenir. Bu örnek kodda, dosya yolu “C:\Users\KullanıcıAdı\Documents\data.xml” olarak belirlenmiştir.
- Ardından, XML dosyası XmlReader sınıfı kullanılarak açılır. XmlReader.Create() metodu, belirtilen dosya yolu için bir XmlReader nesnesi oluşturur.
- Döngü içerisinde, XmlReader.Read() metodu ile XML dosyasındaki her bir düğüm okunur.
- reader.NodeType ve reader.Name özellikleri kullanılarak, “user” element’lerine erişilir.
- “user” element’inin “id” attribute değeri okunur ve userId değişkenine atanır.
- “username” element’inin içeriği okunur ve userName değişkenine atanır.
- Sonuçlar Console.WriteLine() metodu ile ekrana yazdırılır.
XmlTextReader sınıfı, XML dosyasını satır satır okuduğu için, bellek kullanımını minimumda tutar ve büyük XML dosyaları için daha uygundur. Ancak, XmlReader sınıfı gibi, XmlTextReader sınıfı da düşük seviyeli bir sınıf olduğu için, kullanımı daha zordur ve hatalara neden olabilir.
Sonuç
Sonuç olarak, C# ile XML okuma işlemi için farklı sınıflar kullanılabilir. XmlReader sınıfı, XML dosyasını belleğe yüklemeden okuma yapar ve büyük XML dosyaları için uygundur. XmlDocument sınıfı, XML dosyasını tamamen belleğe yükler ve LINQ to XML veya XPath gibi araçlar kullanarak XML verilerine erişim sağlar. XmlTextReader sınıfı, XML dosyasını satır satır okur ve bellek kullanımını minimumda tutar. Hangi sınıfın kullanılacağı, okunacak XML dosyasının boyutuna ve kullanılacak işleve bağlıdır.
Evet C# ile XML okuma işlemi bu şekilde yapılmakta. Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.