C# XDOCUMENT KULLANIMI

Xdocument XmlDocument gibi xml dosyalarını oluşturma,okuma vs gibi işlemlerimiz için kullanabileceğimiz ,bunları yaparken de linq destekli işlemleri kullanmamıza olanak sağlayan bir classdır. Bu tarz özellikleri sayesinde xml üstünde işlem yapılmasını oldukça kolaylaştıran bir classtır. Bu özellik .Net3.5 ve sonrasında mevcuttur.

Örnek olarak aşağıdaki gibi bir sınıf yapımız olsun(Person).Bu Sınıf yapımızı örnek test setleri ile doldurarak liste halinde data sunan ikinci bir sınıf daha ekleyelim(PersonRepository)

public class Person

{

public int ID { get; set; }

public string Name { get; set; }

public int Age { get; set; }

}

public class PersonRepository

{

public List<Person> GetPersonList()

{

List<Person> PersonList = new List<Person>(){

new Person() { ID = 1, Name = “Bilgehan”, Age = 27 },

new Person() { ID = 1, Name = “Tolga”, Age = 30 },

new Person() { ID = 1, Name = “Murat”, Age = 30 },

new Person() { ID = 1, Name = “Yasin”, Age = 25 }

};

return PersonList;

}

}

Örnek 1 Gelen Listeyi XML Formatına dönüştürme

Bundan sonra ikinci aşamada ise bize bu listeyi xml yapısına dönüştürecek kodlarımızı yazalım.Bunun için örnek olması amacıyla uygulamamıza bir textbox ve buton atarak butonun arkasına aşağıdaki kodlarımızı yazalım

PersonRepository pRepository=new PersonRepository();

List<Person> PersonXmlList = pRepository.GetPersonList();

XDocument xDoc = new XDocument(

new XComment(“starting xml”),

new XElement(“PersonList”,

PersonXmlList.Select(x => new XElement(“Person”, new XAttribute(“ID”, x.ID), new XAttribute(“Name”, x.Name), new XAttribute(“Age”, x.Age)))));

xDoc.Declaration= new XDeclaration(“1.0″, “UTF-8″, “yes”);

txtShow.Text = xDoc.ToString();

Çıktıdanda görüldüğü üzere Linq desteği sayesinde elimizdeki listeyi tek satır kodla XmlFormatına dönüştürebiliyoruz.

Not: xDoc.Declaration= new XDeclaration("1.0", "UTF-8", "yes"); satırı ile eğer bir xml dosyası oluşturarak 
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 standardını vermemiz mümkündür
 

Not2: new XComment(“starting xml”), XComment kodu ilede nodelar arası açıklama satırları koymamıza olanak sağlar

Örnek 2 Bir XML Dosyasını okuyarak Parse Etmek

Örnek olarak projemize aşağıdaki gibi bir xml dosyasını ekleyelim

<?xml version=1.0 encoding=utf-8 ?>

<MyDb>

<PersonList>

<Person ID=1 Name=Bilgehan Age=27 >

<Mail>bilge@yildiz.com</Mail>

<Mail>bilgehan13@yildiz.com</Mail>

</Person>

<Person ID=1 Name=Tolga Age=30>

<Mail>tolga@abc.com</Mail>

</Person>

<Person ID=1 Name=Murat Age=30 />

<Person ID=1 Name=Yasin Age=25 />

</PersonList>

<CarList>

<Car ID=1 Brand=Volvo >C30</Car>

<Car ID=2 Brand=BMW >X5</Car>

<Car ID=1 Brand=Hyundai >i30</Car>

</CarList>

</MyDb>

Şimdi bize sistemde bulunan kişilere ait mail listesini verecek bir örnek yapalım

Bunun için ekranımıza ikinci bir buton koyarak xmlden okudugumuz mail adreslerini textboxa yazacak bir kod yazalım

protected void btnReadXmlFile_Click(object sender, EventArgs e)

{

string filename = Server.MapPath(@”/XMLSample.xml”);

XDocument xml = XDocument.Load(filename);

var q = from b in xml.Descendants(“Person”).Descendants(“Mail”)

select b.Value;

foreach (string item in q.ToList())

{

txtShow.Text += item+“;”;

};

}

Burada birinci olarak yaptıgımız şey XDocument.Load komutu ile ilgili xml memory yüklemek daha sonra ise Descendants yardımı ile XName matching olan elemanları yakalıyoruz. xml.Descendants(“Person”).Descendants(“Mail”) bu şekilde ise ilk olarak Person elementlerini yakalıyor.Daha sonra ise person içindeki mail elementlerini yakalıyor.Örnek xmlimizde <Mail>bilge@yildiz.com</Mail> şeklinde oldugu için ilgili elemente gittiğimizde .Value diyerek ilgili değerlere ulaşabiliyoruz

<Car ID=”1″ Brand=”Hyundai” >i30</Car>

<Car ID=”2″ Brand=”BMW” >X5</Car>

Peki bu örneğimizdeki gibi Brand içindeki değere ulaşmak isteseydik o zaman ise sorgumuzu aşağıdaki şekilde yazmak yeterli olacaktı.Burada Brand Car elementinin bir Attribute oldugu için Descendants ile Car elementlerşne ulaşıp daha sonra .Attribute( içine   Attribute adını yazarak) değerine ulaşmamız mümkündür

var q = from b in xml.Descendants(“Car”)

select  b.Attribute(“Brand”).Value;

Örnek 3 XDocument.Parse komutu

Gelen bir string eğer xml formatında ise XDocument.Parse metodunu kullanarak bunu xml haline getirerek nodelar arasında işlem yapmamıza olanak sağlar

Aşağıdaki kod örneği sonuç olarak xml şeklindeki bir stringde yazan Bilgehan değerini okumamızı sağlar

string stringxml =

@”<?xml version=””1.0″”?>

<Personlist>

<Person>Bilgehan</Person>

</Personlist>”;

XDocument xml = XDocument.Parse(stringxml);

var q = from b in xml.Descendants(“Person”)

select b.Value;

foreach (string item in q.ToList())

{

txtShow.Text += item + “;”;

};

}

Bu yazı .NET kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>