C# xml ve for kullanımı

Arkadaşlar merhaba

Benim amacım xmlden verileri çekip teker teker belirli dizilere aktarmak.
Lakin xml okuyucu bütün hepsini aynı anda okuyor ve for hiç 2 olmuyor

önce kodumu atayım

             DirectoryInfo icerik = new DirectoryInfo("OyunlarResim/");
            resimler = icerik.GetFiles();

            yazii = new String[resimler.Length];
            XmlTextReader xmlOku = new XmlTextReader(@"Oyunlar\\Oyunlar.xml");
            for (int i = 0; i < resimler.Length; i++)
            {
                while (xmlOku.Read())
                {
                    if (xmlOku.NodeType == XmlNodeType.Element)
                    {
                        string xmlİsimOku = xmlOku.Name;
                        if (xmlİsimOku == "User")
                        {
                            user = xmlOku.ReadElementString();
                        }
                        if (user == gelenİsim)
                        {
                            if (xmlİsimOku == "Adı")
                            {
                                adi = xmlOku.ReadElementString();
                            }
                            if (xmlİsimOku == "Status")
                            {
                                status = xmlOku.ReadElementString();
                            }
                            if (xmlİsimOku == "Renk")
                            {
                                renk = xmlOku.ReadElementString();
                            }
                            if (xmlİsimOku == "Yazı")
                            {
                                yazii[i] = xmlOku.ReadElementString();
                            }
                        }
                    }
                }
            }

bu da xml verilerim.

Hep en son veriyi alıyor Foru kullanamıyorm lütfen yardım

tam olarak ne yapmaya çalıştığınızı anlayamadım, C#'a da pek hakim değilim fakat sorun hakkında bi tahminim var ve örnek göstererek anlatacağım.

nums = [1,2,3,4,5,6]
val = None
for num in nums:
    val = num

yukarıda döngü içerisinde val değişkeninin değerini sırayla nums listesinin içerisindeki sayı yapıyoruz ancak döngü 6’ya geldiğinde bittiğinden val değişkeni en son 6 olarak kalıyor. sizde de muhtemelen bu tip bir sorun var. en son okunan değeri bir önceki değerin üstüne yazıyorsunuz. bu yüzden böyle bir problem doğuyor.

evet böyle bir problem hocam farkındayım

Fakat While döngüsü sürekli devam ettiriyor

For’a hiç bir zaman gelmiyor

while döngüleri içerisine verilen kondisyon false olana kadar çalışır. xmOku.Read() hiçbir zaman false olmuyor

evet benim için çok basit ama kafam durdu yapamadım

Ama Read olmayınca da işime yaramıyor ki

aşağıdaki bilgileri teker teker almam lazım

xmlOku.Read() tam olarak ne döndürüyor?

xmlOku bir i icin bittikten sonra digerleri icin de bitik oluyor. Yani sadece i = 0 icin calisiyor.

hocam bunun farkındayım
lakin nasıl çözeceğimi bilmiyorum

Valla onu ben de bilmiyorum zira ne yapmaya calistigini soylememissin.

bkz: Soru Sorarken Sıkça Düşülen Hatalar #8, #4 ve #6

Merhaba,

Kodu denemedim. Hala bir VS studio kurmaya üşeniyorum.

Koda göz ucuyla okudum.

Ama bir xml dosyasındaki elementleri okumak için while ile okumak her seferinde tekrarlanıyorsa bir tuhaflık var gibi.

Yani her seferinde okuyup son veriye geliyorsa gayet normal bir durum.

Bence farklı bir yöntem daha anlaşılır olacaktır.

c# - Reading specific XML elements from XML file - Stack Overflow

For ile kullanacaksam yukarıdaki linkteki gibi her anahtarı tek tek almak yada parse etmek için denemeler yapılabilir.

Buradaki örneklere de bakabilrsiniz.

Read XML data from a URL by using C# - C# | Microsoft Learn

Tabi;

for (int i = 0; i < resimler.Length; i++)

Satırında ilk kez girdiğinde tamamını okumuş ve bitirmiş oluyor while döngüsünde gibi duruyor.

Yani bence demedim, while loop un içinde for ile de denenebilir.

Söylediğim gibi denemeden pek kod vermem, göz ucuyla kodun xml li tamamen okuduğunu ilk for değerinde ve sonrakinde de bunu tekrar ettiğini düşünüyorum.

Örneklerden elementleri adım adım çekmeyi deneyip her çekileni almak daha kolay gibi.

Kolay gelsin.

teşekkürler semtex eline sağlık


        private void XmlOku()
        {

            DirectoryInfo icerik = new DirectoryInfo("OyunlarResim/");
            resimler = icerik.GetFiles();

            statusList = new List<string>();
            renkList = new List<string>();
            yaziList = new List<string>();




            XDocument xdoc = XDocument.Load(@"Oyunlar\\Oyunlar.xml");

            var oyunlar = from oyun in xdoc.Descendants("Oyun")
                          where (string)oyun.Element("User") == "Ozay"
                          select new
                          {
                              Status = (string)oyun.Element("Status"),
                              Renk = (string)oyun.Element("Renk"),
                              Yazı = (string)oyun.Element("Yazı"),
                          };

            foreach (var oyun in oyunlar)
            {
                statusList.Add(oyun.Status);
                renkList.Add(oyun.Renk);
                yaziList.Add(oyun.Yazı);
            }

        }

    }
}

şöyle bir şey denedim,şimdilik işimi gördü

1 Beğeni