Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

XML Soru C#


Öne çıkan mesajlar

Mesaj tarihi:
şimdi efem elimizde bir xml dosyamız war ve verisi şu şekilde:










şimdi ben buraya yeni cevap elementleri ve o elementlerede yeni attribute'ler eklemek istiyorum.
C#
XmlDocument xDoc = new XmlDocument();
xDoc.Load("c:herneyse.xml" );

XmlElement element = xDoc.CreateElement("Soru/deneme" );
şimdi burada sanırım yanlış giriyorum parametreleri. yada eksik birşey war, varmı xml'den anlayan?

xDoc.AppendChild(element);
xDoc.Save("c:herneyse.xml" )
Mesaj tarihi:
Birden fazla parent node yapmaya çalıştığın içindir?

Bir tane esas node olacak, onun içine istediklerini atabilirsin yanlış ahtırlamıyosam yani:









.......
.......


Şeklinde oluşturmayı dene.

Senin gönderdiğinde "soru" parent olduğundan ikincisine izin vermiyor.

Yanlış hatırlıyosam düzeltir birileri :)
Mesaj tarihi:
Şimdi xml'in içeriğini değiştiremem. Soru root'una yeni bir node, element gibi birşey eklemem lazım. Bunu perşembe günü yapmıştım. takır takırda çalışıyordu ama unuttum kodları şimdi bir bakayım derken. MSDN olsun w3schools olsun o kadar çok bilgi varki beynim döndü. X(

ah bi ulaşabilsem soru köküne ekliycemde
Mesaj tarihi:
Hmm bu yapıda bi XML yaratcak/deiştircek olsam şöyle yazarım kodu:

Edit: Tabi bu kod o bilmemne.xml'in root node'unun "Soru" olduğunu varsayıyo, her çalıştırmada ona bi şeyler ekliyo. Birden fazla soru node'u olsun diyosan en başta Sorular diye bi node yaratır, Soru nodelarını ona eklersin ama soruda öyle denmemiş tabii.


XmlDocument doc = new XmlDocument();
try { doc.Load("C:bilmemne.xml"); }
catch { }
XmlNode nodSoru = doc[Soru] == null ? doc.CreateElement("Soru") : doc[Soru];
XmlAttribute attrSoruText = doc.CreateAttribute("Text");
attrSoruText.Value = "hede hödö";
nodSoru.Attributes.Append(attrSoruText);

XmlNode nodAnketBaslik = doc.CreateElement("AnketBaslik");
XmlAttribute attrAnketBaslik = doc.CreateAttribute("Text");
attrAnketBaslik.Value = "kjvblckjn";
nodAnketBaslik.Attributes.Append(attrAnketBaslik);

XmlNode nodCevap1 = doc.CreateElement("Cevap");
XmlAttribute attrCevap1Text = doc.CreateAttribute("Text");
attrCevap1Text.Value = "bxcvbx";
XmlAttribute attrCevap1Adet = doc.CreateAttribute("Adet");
attrCevap1Adet.Value = "1";
nodCevap1.Attributes.Append(attrCevap1Text);
nodCevap1.Attributes.Append(attrCevap1Adet);

XmlNode nodCevap2 = doc.CreateElement("Cevap");
XmlAttribute attrCevap2Text = doc.CreateAttribute("Text");
attrCevap2Text.Value = "bxcvbx";
XmlAttribute attrCevap2Adet = doc.CreateAttribute("Adet");
attrCevap2Adet.Value = "0";
nodCevap2.Attributes.Append(attrCevap2Text);
nodCevap2.Attributes.Append(attrCevap2Adet);

nodAnketBaslik.AppendChild(nodCevap1);
nodAnketBaslik.AppendChild(nodCevap2);
nodSoru.AppendChild(nodAnketBaslik);
try { doc.AppendChild(nodSoru); }
catch { }

doc.Save("C:bilmemne.xml");
Mesaj tarihi:
hmmm eyw hocam süper yazmışsın.
bende şimdi şu kodla yeni bir eklettirdim en alta. eğer attr'lerinide eklemeye uğraşayım biraz. olmadı senin yöntemi alıcam direk.

XmlElement element = xDoc.CreateElement("Soru", "Cevap", "" );

xDoc.ChildNodes[1].ChildNodes[0].AppendChild(element);


sonuç:







Mesaj tarihi:
Çok fazla xmlle uğraşmadım, ama iki tane root node olamaz. Daha önce yaptım demişsin ama yanlış hatırlıyosundur kesin. 2. bir root eklemeye çalıştığında appendchild metodu kızar sana.

Şimdi ilk postu tekrar okudum da sen zaten ikinci bir soru eklemeye çalışmıyosun. Soru senin rootun olduğuna öre içine ekleyeceğin cevaplarda sorun olmaması lazım, Kojiroh'un yaklaşımı doğru, onu kullan.
Mesaj tarihi:
XmlTextWriter'la hallettim. ama performans olarak xdocumentten kötü, çünkü bilgileri baştan aşağı yeniden yazıyor xml'in içini.

araya nokta atışı yapan bir kod bulamadım. belikide yoktur :)
Mesaj tarihi:
Yazarken hepsi öyle yapıyor. İlk önce bütün dökümanı hafızada oluşturuyorsun. Sonra olduğu gibi dosyaya yazdırıyorsun.

Edit: XML okumak ve işlemek için kullanılan SAX adında event bazlı bir API. Onun XML yazmak için geliştirilmiş bir StAX diye bir versiyonu var. Onla yazarken bütün dökümanı hafızada tutmadan stream şeklinde yazdırılabiliyor.

Hatırladığım kadarıyla bahsettiğin nokta atışı hiç bir text manipulasyonu için mümkün değil. Sadece dosyanın sonuna bir şey eklersen mümkün. Aksi taktirde bütün dosyayı baştan yazman gerekiyor.
×
×
  • Yeni Oluştur...