Witam,
Mam 2 problemy z zapisywaniem XML.
Mam szablon prostego xml:
<?xml version="1.0" standalone="yes"?>
<Testy>
<Wiersz>
<String>Ala</String>
<String>Adam</String>
<String>Maciek</String>
</Wiersz>
<Wiersz>
<String>Tomek</String>
<String>Zofia</String>
<String>Mariusz</String>
</Wiersz>
<Wiersz>
<String>Stanislaw</String>
<String>Michal</String>
<String>Katarzyna</String>
</Wiersz>
</Testy>
użytkownik w programie może zdefiniować nowy wiersz z nowymi stringami i tak próbuję to zapisać:
DataSet ds = new DataSet();
ds.ReadXml("Stringi1.xml");
ds.Tables[0].Rows.Clear();
foreach (Tekst item in listaTekstow)
{
DataRow row = ds.Tables[0].NewRow();
row["String"] = item._String;
ds.Tables[0].Rows.Add(row);
}
ds.WriteXml("Stringi.xml");
Wywala wyjątek:
System.Data.InvalidConstraintException: Nie można wyczyścić tabeli Wiersz, ponieważ element ForeignKeyConstraint Wiersz_String wymusza ograniczenia oraz w elemencie String istnieją wiersze podrzędne.
Ten kod działałby gdyby w znacznikach wiersz był tylko jeden znacznik <String> a nie parę. Jak więc mogę odczytać parę znaczników o tej samej nazwie?
- Drugi problem jest podobny do pierwszego. Mam taki przykładowy xml:
<?xml version="1.0" standalone="true"?>
<Testy>
<Wiersz>
<Punkt>
<X>34</X>
<Y>33</Y>
</Punkt>
<Punkt>
<X>34</X>
<Y>33</Y>
</Punkt>
<Punkt>
<X>34</X>
<Y>33</Y>
</Punkt>
<Punkt>
<X>34</X>
<Y>33</Y>
</Punkt>
<Punkt>
<X>34</X>
<Y>33</Y>
</Punkt>
</Wiersz>
</Testy>
użytkownik, tak samo jak w pkt 1, może sam tworzyć nowy węzeł Wiersz ze znacznikami Punkt i ich wartościami, ale jak próbuję tak zapisać:
DataSet ds = new DataSet();
ds.ReadXml("Punkty.xml");
//ds.Tables[1].Rows.Clear();
DataRow row = ds.Tables[0].NewRow();
ds.Tables[1].Rows.Clear();
foreach (Punkt p in listapunktow)
{
DataRow row1 = ds.Tables[1].NewRow();
row1["X"] = p.X;
row1["Y"] = p.Y;
ds.Tables[1].Rows.Add(row1);
}
ds.Tables[0].Rows.Add(row);
ds.WriteXml("Punkty.xml");
To w wyniku dostaję to:
<?xml version="1.0" standalone="yes"?>
<Testy>
<Wiersz />
<Wiersz />
<Punkt>
<X>234</X>
<Y>43</Y>
</Punkt>
<Punkt>
<X>1321</X>
<Y>10</Y>
</Punkt>
<Punkt>
<X>232</X>
<Y>111</Y>
</Punkt>
</Testy>
czyli znaczniki <Wiersz> pieprzą się strasznie.
Jakieś pomysły?