Xml Dosya, Urun ve Ozellik Classları.

turk182Erkin ERDOGAN

Selam arkadaşlar,

Desteğinize ihtiyacım var.

Araştırırken aşağıdaki makaleye rastladım, sanırım ASP bu kodlar. Bunu php dilinde nasıl yaparım?


Xml Dosya:

<urunler>

  <urun>

    <urun_kodu>NKTLFN-6500</urun_kodu>

    <urun_adi>NOKİA 6500</urun_adi>

    <alis_fiyati>350</alis_fiyati>

    <satis_fiyati>450</satis_fiyati>

    - <ozellikler>

        <ozellik adi="Kamera" degeri="3.2 Mpx" />

        <ozellik adi="Video Kayıt" degeri="Var" />

        <ozellik adi="Konuşma Süresi" degeri="120 saat" />

        <ozellik adi="Bluetooth" degeri="Var" />

        <ozellik adi="Wi-Fi" degeri="Yok" />

        <ozellik adi="Mp3 Çalar" degeri="Var" />

    </ozellikler>

  </urun>

</urunler>


Urun ve Ozellik Classı:

public class Urun

    {

        public string UrunKodu { getset; }

        public string UrunAdi { getset; }

        public decimal AlisFiyati { getset; }

        public decimal SatisFiyati { getset; }

        public List<Ozellik>  Ozellikler { getset; }

 

        public Urun()

        {

            this.Ozellikler = new List<Ozellik>();

        }

    }

    public class Ozellik

    {

        public string Adi { getset; }

        public string Degeri { getset; }

 

        public Ozellik()

        {}

    }


 Yukarıdaki iki classı kullanarak işlemlerimize başlayalım. İlk önce elimizde bulunan Xml Dosyasını bir XmlDocument nesnesi içerisine atıyoruz. Daha sonra bizim işlem yapacağımız nesne Ürünler olduğu için bu Xml dosya içerisindeki <urun> tagları arasındaki verileri "urunler" adını verdiğimiz XmlNodeList nesnesine atıyoruz. Bir urun listesi oluşturduktan sonra elimizde bulunan urunler isimli XmlNodeListin içeriğini içindeki <urun> tagının adeti kadar dönüyoruz. Elimize geçen her ürün tagından yeni bir ürün oluşturup, değerleri atıyoruz. Bu adımdan sonra sıra Attribute değerlerini okumaya geliyor. Bu kısımda içerisinde bulunduğumuz ürün tagının içerisindeki <ozellikler> Node nesnesinin içerisindeki <ozellik> taglarını da "ozellikler" adını verdiğimiz XmlNodeList nesnesine atıyoruz.

public List<Urun> XmlOku()

    {

        XmlDocument doc = new XmlDocument();

        doc.Load(Server.MapPath("XmlFile.xml"));

 

        XmlNodeList urunler = doc.SelectNodes("/urunler/urun");

 

        List<Urun> urunListesi = new List<Urun>();

        for (int i = 0; i < urunler.Count; i++)

        {

            Urun u = new Urun();

            u.UrunKodu = urunler[i]["urun_kodu"].InnerText;

            u.UrunAdi = urunler[i]["urun_adi"].InnerText;

            u.AlisFiyati = Convert.ToDecimal(urunler[i]["alis_fiyati"].InnerText);

            u.SatisFiyati = Convert.ToDecimal(urunler[i]["alis_fiyati"].InnerText);

 

            XmlNodeList ozellikler = urunler[i].SelectNodes("ozellikler/ozellik");

            for (int j = 0; j < ozellikler.Count; j++)

            {

                u.Ozellikler.Add(new Ozellik() { Adi = ozellikler[j].Attributes["adi"].Value, Degeri = ozellikler[j].Attributes["degeri"].Value});

            }

 

            urunListesi.Add(u);

        }

        return urunListesi;

    }


       Ozellikler adını verdiğimiz bu XmlNodeListesi artık bizim ilk "for" döngüsündeki işlem yaptığımız ürünün özellikleri oluyor.Attribute değerlerinide yukarıda görüldüğü şekilde okuyarak her nesneyi kendi özelliğine atıyoruz. Ve oluşan her urunu listeye ekliyoruz. XMLOku() metodundan dönen ürün listesini artık aşağıdaki şekilde istediğiniz yerde kullanabilirsiniz.

       List<Urun> okunanUrunler = XmlOku();

       foreach (Urun item in okunanUrunler)

       {

           //yapacağınız işlemler

       }


2014-03-12 00:14:29 Edit:2014-03-12 21:50:24

Php

basit bir hesaplama class gerektirmez bence. bilgilerin bir XML dosyasından alınması zorunlu mu ?

Her programcı birgün Php yi tadacaktır
2014-03-15 21:06:03

php

turk182Erkin ERDOGAN

evet bir xml'den alıyor veriyi. Ve bendeki xml yapısı şu şekilde:


<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<STOKLAR>
<STOK Stok_Kod="" Stok_Ad="">
<OZELLIKLER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
<OZELLIK></OZELLIK>
<DEGER></DEGER>
</OZELLIKLER>
</STOK>
</STOKLAR>
</ROOT>

Ben şu şekilde istediğimi ekrana yazdırabiliyorum:


<?php

// SimpleXML

$ROOT = new SimpleXMLElement('urunozellikleri.ashx', null, true);   

echo <<<EOF

<table>

EOF;

foreach($ROOT->children() as $STOKLAR) {

foreach($STOKLAR->children() as $STOK) {

foreach($STOK->children() as $OZELLIKLER) {

for($s=0;$s<count($OZELLIKLER);$s++)

        {

        echo <<<EOF

  <tr>

    <td>{$OZELLIKLER->OZELLIK[$s]}</td>

    <td>{$OZELLIKLER->DEGER[$s]}</td>

  </tr>

EOF;

}

}

}

}

echo '</table>';

?>


Bunu bir değişkene nasıl atayacağım?

2014-03-16 16:30:55 Edit:2014-03-16 16:34:46

Edit:

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro