logo


Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 10 Mayıs 2014 Cumartesi 07:22:18(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Bilgehan Yıldız'a bu değerli yazısı için teşekkür ederiz

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)

Kod:

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.

Kod:

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.

UserPostedImage

Kod:

 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

Kod:

<?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

Kod:

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

UserPostedImage

<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

Kod:

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 + “;”;

};

}
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...
thanks mehmetzekikir: 1 Kişi mesajın için Teşekkür Etti.
musa_ 10.05.2014(UTC) tarihinde


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.