• 17-07-2017, 19:42:02
    #1
    Merhaba Arkadaşlar,

    C# ile bir proje üzerinde uğraşıyorum.

    XML üzerinden projede bulunan TextBox'lara veri çekiyorum ancak XML de bazı dizinler birden fazla girdiye sahip. Kök dizini çektiğim zaman içerisinde bulunan alt dizinlerle birlikte çekiyor, aralarına boşluk ya da virgül eklemeye çalışıyorum.

    XML Örneği aşağıda;

    <ROOT>
    <ID>IDBURADA</ID>
    <YIL>2010</YIL>
    <ICERIKLER>
    <ICERIKLER_ n="1">ICERIK1</ICERIKLER_>
    <ICERIKLER_ n="2">ICERIK2</ICERIKLER_>
    </ICERIKLER>
    </ROOT>
    Bu örnekte bulunan ICERIKLER kısmını SelectSingleNode ile çekiyorum, ICERIK1ICERIK2 şeklinde bir çıktı alıyorum.

    Bu aldığım çıktıyı ICERIK1, ICERIK2 ile yazdırma şansım var mı?

    C# üzerindeki kodlar aşağıdadır;

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("URL");
    XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/ROOT");
    string urunID = "", urunYIL = "", icerikS = "", ;
    
    foreach (XmlNode node in nodeList)
    {
    urunID = node.SelectSingleNode("ID").InnerText;
    urunYIL = node.SelectSingleNode("YIL").InnerText;
    icerikS = node.SelectSingleNode("ICERIKLER").InnerText;
    
    // Textboxlara yazdırdığım kısım..
    textBox1.Text = icerikS
    
    }
    Bu şekilde tamamladığım zaman textBox1 ögesine ICERIK1ICERIK2 olarak çıktı alıyorum. Biraz önce de bahsettiğim gibi bunu ICERIK1, ICERIK2 olarak çekmem gerekiyor.

    Yardımcı olabilecek arkadaş var mı? Neler yapılabilir?
  • 17-07-2017, 19:48:33
    #2
    SingleNode olarak seçtiğiniz için oluyor bu sanırım.

    SelectNodes demeniz gerekiyor root node u altında.

    Bakınız : https://msdn.microsoft.com/tr-tr/lib...v=vs.110).aspx
  • 17-07-2017, 19:54:57
    #3
    dotnetDeveloper adlı üyeden alıntı: mesajı görüntüle
    SingleNode olarak seçtiğiniz için oluyor bu sanırım.

    SelectNodes demeniz gerekiyor root node u altında.

    Bakınız : https://msdn.microsoft.com/tr-tr/lib...v=vs.110).aspx
    Merhaba Hocam,

    Öncelikle hızlı cevabınız için teşekkür ediyorum.

    SelectNodes dediğim zaman tek tek Node'ları belirtmem gerekecek, node'lar static değil maalesef. Yani bir başka xml dosyasında 5 tane ICERIKLER_ n="" değeri olabilir.

    Bahsi geçen sayfayı incelemiştim ancak bir çıkış yolu bulamadım o şekilde.
  • 17-07-2017, 19:57:21
    #4
    MehmetS adlı üyeden alıntı: mesajı görüntüle
    Merhaba Hocam,

    Öncelikle hızlı cevabınız için teşekkür ediyorum.

    SelectNodes dediğim zaman tek tek Node'ları belirtmem gerekecek, node'lar static değil maalesef. Yani bir başka xml dosyasında 5 tane ICERIKLER_ n="" değeri olabilir.

    Bahsi geçen sayfayı incelemiştim ancak bir çıkış yolu bulamadım o şekilde.
    Node ları aldıktan sonra foreach döngüsü içerisinde dönerseniz var olan tüm node ları gezmiş olursunuz.

    Macte olduğum için .net core da aynısı yok bu kütüphanenin kontrol edemiyorum ama dediğim şekilde yaparsanız çözüm olacaktır.
  • 17-07-2017, 20:00:04
    #5
    Teşekkür ederim, bir deneyeyim bakalım.
  • 20-07-2017, 11:31:56
    #6
    İl -> ilçe -> semt bilgisi olan bir xml dosyadan verileri objecte alma.

    XDocument okuyucu = XDocument.Load(Directory.GetCurrentDirectory() + @xmlYolu);
    semtlerDask.Clear();
    ilcelerDask.Clear();
    var q = from b in okuyucu.Descendants("IL")
    select new
    {
    plaka = (string)b.Element("ILNO"),
    ilAdi = (string)b.Element("ILADI"),
    ilceler = (from i in b.Descendants("ILCE")
    select new
    {
    ilceKodu = (string)i.Element("ILCENO"),
    ilceAdi = (string)i.Element("ILCEADI"),
    semtler = (from s in i.Descendants("SEMT")
    select new
    {
    semtKodu = (string)s.Element("SEMTNO"),
    semtAdi = (string)s.Element("SEMTADI")
    })
    }
    )


    };
    illerDask.Add(new Araclar.ilbilgisi { deger = "", isim = "Seçiniz" });
    foreach (var item in q)
    {
    Araclar.ilbilgisi ilbilgi = new Araclar.ilbilgisi();
    ilbilgi.deger = item.plaka;
    ilbilgi.isim = item.ilAdi;

    foreach (var item2 in item.ilceler.ToList())
    {
    Araclar.ilcebilgisi ilcebilgi = new Araclar.ilcebilgisi();
    ilcebilgi.ilNo = item.plaka;
    ilcebilgi.deger = item2.ilceKodu;
    ilcebilgi.isim = item2.ilceAdi;

    foreach (var item3 in item2.semtler.ToList())
    {
    Araclar.semtbilgisi semt = new Araclar.semtbilgisi();
    semt.ilNo = item.plaka;
    semt.ilceNo = item2.ilceKodu;
    semt.deger = item3.semtKodu;
    semt.isim = item3.semtAdi;
    semtlerDask.Add(semt);
    }

    ilcelerDask.Add(ilcebilgi);
    }

    illerDask.Add(ilbilgi);
    }

    }