9. XML – C# bağlantısı : xmlDocument sınıfı

Xml üzerinden bir veri okumak istersen XmlTextReader , bir xml dosyası oluşturup yazmak istersek XmlTextWriter sınıfını kullanıyoruz. Ancak bunların yanısıra bu iki işlemi de yapan tek bir sınıf da mevcut XmlDocument sınıfı. Madem iki iki tek başına yapan bir sınıf mevcut neden diğer iki sınıf var ? eğer sadece okuma işlemi yapacaksak XmlTextReader ya da sadece yazma işlemi yapacaksak XmlTextWriter sınıfını kullanmamız daha doğru ve verimlidir. XmlDocument sınıfının ayrıcalığı ise Xmli bize bir document object model olarak sunması ve bize nodelar arasında gezinme şansı vermesidir.

mail.xml

<mail_kutusu>
  <mail>
    <kime>cagatay</kime>
    <kimden>MUSTAFA</kimden>
    <konu>YAZILIM</konu>
    <mesaj>MESAJ ICERIGI</mesaj>
  </mail>
</mail_kutusu>

1. İlk olarak XmlDocument’a ait bir nesne oluşturulur ve xml dosyası bu nesneye yüklenir.

     XmlDocument doc = new XmlDocument();

     doc.Load("mail.xml");


2.
XmlDocument sınıfı bize xml dosyasını tree yapısında bir dom nesnesi olarak sunduğu için xml içerisinde gezinebilmek için root elementi alarak başlamalıyız.

XmlElement elm = doc.DocumentElement;
Console.Write(elm.Name);

Eğer ki root elementin içerisindeki elementler , cocuk ve torunların , iç textlerini çekmek istersek ;

  Console.WriteLine(elm.InnerText);

Output : cagatayMUSTAFAYAZILIMMESAJ ICERIGI

Eğer ki bu işlemi taglerle beraber yapmak istersek aşağıdaki ifadeyi kullanırız ancak bu üzerinden çağırıldığı root elementi yazdırmaz.

  Console.Writeline(elm.InnerXml);

Output : <mail><kime>cagatay</kime><kimden>MUSTAFA</kimden><konu>YAZILIM</konu><mesaj>MESAJ ICERIGI</mesaj></mail>

Eğer root ile beraber tüm iç xml tagleri ve içerisindeki textleri çekmek istersek  aşağıdaki ifadeyi kullanırız

  Console.Writeline(elm.OuterXml);

Output : <mail_kutusu><mail><kime>cagatay</kime><kimden>MUSTAFA</kimden><konu>YAZILIM</konu><mesaj>MESAJ ICERIGI</mesaj></mail></mail_kutusu>

Eğer root elementin altındaki sadece child nodelera ulaşmak istersek (torunlar hariç), aşağıdaki ifade bize bu nodeları list olarak döner

 XmlNodeList liste = elm.ChildNodes;
 int sayi = liste.Count;

  string str = "";

  for (int i = 0; i < sayi; i++)
  {
     str += liste[i].Name + "\n";
  }

  Console.WriteLine(str);

Output : mail

3. Nodelar arasında rastgele gezinmek istersek

 Console.WriteLine(elm.FirstChild.Name); //mail
 Console.WriteLine(elm.LastChild.Name); //mail_kutusunun son elementi.

 Console.WriteLine(elm.FirstChild.NextSibling.Name); //ilk cocuk elementin en yakın kardeşi
 Console.WriteLine(elm.LastChild.PreviousSibling.Name); //ilk cocuk elementin en yakın kardeşi

 Console.WriteLine(elm.FirstChild.ChildNodes[2].InnerText);

TÜM KOD

class Program
 {

     static void Main(string[] args)
     {

          XmlDocument doc = new XmlDocument();

          doc.Load("C:/Users/LENOVO/documents/visual studio 2017/Projects/ConsoleApp3/ConsoleApp3/mail.xml"); //xmli yükler

          XmlElement elm = doc.DocumentElement; //root elementi bir element node olarak verir.
          Console.WriteLine(elm.Name); //root elementin adını verir.
 
          Console.WriteLine(elm.InnerText); //root elementin altındaki tüm text verilerini verir.

          Console.WriteLine("*******************************************************************");
      

          Console.WriteLine(elm.InnerXml); //root elementin altındaki tüm text verilerini etiketleriyle beraber verir. Root hariç
          Console.WriteLine(elm.OuterXml); //root elementin altındaki tüm text verilerini etiketleriyle beraber verir. Root dahil

          Console.WriteLine("*******************************************************************");

          XmlNodeList liste = elm.ChildNodes; //Root elementin altındaki child nodeları bir liste halinde döndürür.
          int sayi = liste.Count;

          string str = "";

          for (int i = 0; i < sayi; i++)
          {
            str += liste[i].Name + "\n";
          }

          Console.WriteLine(str);

          Console.WriteLine("*******************************************************************");

          Console.WriteLine(elm.FirstChild.Name); //mail
          Console.WriteLine(elm.LastChild.Name); //mail_kutusunun son elementi.

          Console.WriteLine(elm.FirstChild.NextSibling.Name); //ilk cocuk elementin en yakın kardeşi
          Console.WriteLine(elm.LastChild.PreviousSibling.Name); //ilk cocuk elementin en yakın kardeşi

          Console.WriteLine(elm.FirstChild.ChildNodes[2].InnerText);

      Console.ReadKey();
   }

}