Xml Dosyaları Arasındaki İlişkiler Hakkında
7
●643
- 20-11-2012, 01:24:14merhabalar arkadaşlar wpf de bir proje geliştiryorum wpf uygulamalarında sanırım access veritabanı kullanılmıyor bu yüzden xml kullanmayı düşünüyorum. Fakat aklıma takılan bir soru var access gibi bir veri tabanı kullandığımda örneğin 2 adet tablom var 1.si personel 2.si görevler bu ikisindeki ilişkiyi kurmak için personelID = gorevID gibi bir ifade kullanabiliyordum. Xml'de bu tip yapı kullanılmıyor sanırım ağaç tipli bir yapısı olduğu için. Xml ile bu ilişkiyi nasıl sağlayabilirim ?
- 20-11-2012, 02:15:03Merhaba,
Access db yi kullanabilirsin wpf de problem olmaması lazım.
xml e gelince direk bir bağ kuramazsın ama şu şekil yapabilirsin
...
<personeller>
<personel departmanID=1 ad=xx />
<personel departmanID=5 ad=yy />
<personeller>
<departmanlar>
<deparmant departmanID=1>Mühendislik</departman>
<deparmant departmanID=2>Satış</departman>
....
</departmanlar>
kod ile hem personelleri hem de departmanı çekersin id lerine göre linq de bir sorgu yazarak halledebilirsin ya da if ve for kullanarak da yapabilirsin.
xml i gözünde çok büyütme, her hangi bir özellği yok bildiğin metin formatının belirli bir ölçütle yazılmasıdır, her hangi bir akıllı özelliği yoktur. xml den veri okuyan yazılımlar xml kuralların göre kütüphanelerini oluşturuyorlar.. o kadar. yani xml in bir yeteneği yok. access gibi ya da diğer veritabanı yöneticileri gibi ilişkisel veritabanı yapısı yoktur. (daha fazla ayrıntı için rdbms tanımını aratabilirsin) - 20-11-2012, 02:43:30teşekkürler ertan access veritabanını kullanmaya çalıştım garip bir execption hatası vermişti tekrardan baksam iyi olur.
birde xml'de kayit silmeye çalışırken elementi sildiremiyorum sadece içindekilerini siliyor şöyleki : xml içeriği :
<kullanici>
<ad>admin</ad>
<parola>123</parola>
</kullanici>
kullandığım kod:
XmlNode silinecek = root.SelectSingleNode("/kullanicilar/kullanici[ad='admin']");
silinecek.RemoveAll();
doc.Save("kullanici.xml");
yeni xml içeriği :
<kullanici>
</kullanici>
bu <kullanici> taglarını silmenin bir yolu varmı acaba ? - 20-11-2012, 03:26:59linq bilmiyorsan öğrenmek için iyi bir fırsat olabilir bence
yani zor olur diye bakma. harici xml parser kütüphaneleri var bu işleri daha da kolaylaştıran onları araştır ve onları kullan. sonra sorgulamalarında linq kullanarak ya da lambda expression kullanarak istediğin veriyi al. mesela
var MuhendislikDepartmaniID = Departmanlar.Where(d=>d.Name == "Mühendislik").First().DepartmanID; var muhendisler= personneller.Where(p=>p.DepartmanID == MuhendislikDepartmaniID); foreach(muhendis in muhendisler) Console.WriteLine(muhendis.Ad);
gibi bir mantık yürütebilirsin belki yazdığım kodu anlamadın ama kısaca bi özet geçeyim.
not: kodu elle yazdım direk kopyalayıp yapıştırırsan çalışmaz. sadece işleyişi bu şekilde olabilir diye düşün.
ilk satırda departmanlar parentnode undan mühendislik olanının departman idsini muhendislik deparmanid ye eşitledim.
ikinci satırda persnel parentnode undan hangi prsonelin departman idsi mühendislik departman id sine eşitse onları mühendisler değişkenine eşitledim.
sonra da foreach ile bu mühendislerin isimlerini ekrana yazdırdım..
iki satır kodla koskoca iş yapıldı
if ve for kullanarak çok daha uzardı.
- 20-11-2012, 03:45:06anladım ertan haklısın linq öğrenmek için iyi bir fırsat olabilir bu verdiğin örnekteki xml içerikleri aşağıdaki gibi olabilir dimi doğru anlamışmıyım:
depertmanlar.xml
<departmanlar>
<ad id="1">Mühendislik</ad>
</departmanlar>
personeller.xml
<personeller>
<ad>burak</ad>
<departmanID>1></departmanID>
</personeller> - 20-11-2012, 03:50:51evet böyle hocam .. aslında çok esneklik var parentnode oluşturmda. yani kimini attribute olarak alabilirsin kimininde değerini mesela
<ad a="1">deneme</ad>
a bir attribute dur. deneme ise ad tagının bir değeridir. bu ikisine göre de işlem yapabilirsn ya da farklı bir yapı oluşturabilrsin persnelde yaptığın gibi.. sadece xml de okurken attribute mu yoksa element i mi okuduğuna dikkat et
linq i her hangi bir list yapısında rahatça kullanabilirsin (IEnumarable, IQuerable ...)
yani zor olur diye bakma. harici xml parser kütüphaneleri var bu işleri daha da kolaylaştıran onları araştır ve onları kullan. sonra sorgulamalarında linq kullanarak ya da lambda expression kullanarak istediğin veriyi al. mesela