[C# 2.0] XmlDataDocument laadt geen data *

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Ik wil een gedeelte van een xml bestand in een dataset laden, en daarna gewijzigde gegevens in het xml bestand opslaan. Zodoend kwam ik op de XmlDataDocument class uit. Volgens het voorbeeld in de help (http://msdn2.microsoft.co...rary/k4swfa13(VS.80).aspx) moet dat vrij eenvoudig kunnen. Mijn eerste test faalde echter jammerlijk, er werden 0 rijen in de datatable geladen. Daarom heb ik in een test project feitelijk het voorbeeld nagemaakt:
-Simpele dataset, genaamd TestDataset met 1 tabel:
[OrderDetails]
OrderID
ProductID
-De voorbeeld xml in een xml bestand genaamd c:\Test.xml gekopieerd
-Een testclass gemaakt:
C#:
1
2
3
4
5
6
7
TestDataset test = new TestDataset();
XmlDataDocument doc = new XmlDataDocument(test);
System.Diagnostics.Debug.WriteLine("Loading...");
doc.Load(@"c:\Test.xml");

foreach (TestDataset.OrderDetailsRow row in test.OrderDetails)
    System.Diagnostics.Debug.WriteLine(string.Format("{0}, {1}", row.OrderID, row.ProductID));

En nog staan er nul rijen in de datatable... Ik heb me al suf gegoogled, maar ik kan niets vinden.

Edit: Ik heb de link nog even aangepast, die verwijst naar het exacte voorbeeld dat ik bedoel.

[ Voor 14% gewijzigd door sig69 op 08-05-2007 19:36 . Reden: ms-help: url vervangen door de HTTP versie ;) ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Je laad je gegevens in in een XmlDocument, maar niet in de DataSet.
Wat jij doet, is een XmlDocument maken op basis van de gegevens uit je DataSet, en dan ga je in je XmlDocument dat bestand gaan inladen.

Het is dan nogal logisch dat je dataset niet nog eens de gegevens / veranderingen die zich in je XmlDocument voordoen gaat gaan overnemen.

Kijk eens naar de ReadXml method van de DataSet.

https://fgheysels.github.io/


Verwijderd

XmlDataDocument is een speciaal soort XmlDocument die wel zo zou moeten werken.
Waarschijnlijk klopt de structuur van de XML niet met die van de DataSet?
Is het wel Test.OrderDetailRow en niet TestDataSet.OrderDetailRow?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Shit, dat heb ik dus altijd als ik code uit een testcase kopieer en plak en nog wat aanpas. In het voorbeeld had het ook TestDataset.OrderDetailRow moeten zijn. De code is (volgens mij) 100% goed, ook geen exceptions, de xml terugschrijven gaat ook goed. Ik krijg alleen niets in m'n dataset. Ik zal het zo thuis nog eens proberen, misschien dat een verse start een oplossing bied.

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Net even getest in VS.NET 2005: werkt niet
Daarna geprobeerd in VS.NET 2003: werkt wel.

Tevroeg conclusies getrokken; ook in VS.NET 2005 werkt het.

[ Voor 28% gewijzigd door whoami op 08-05-2007 21:22 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Hoe ben je zeker dat er 0 rijen in je DataTable staan ? Ik bedoel; uit wat trek je die conclusie ? Heb je eens mbhv een Watch de Rows.Count property bekeken ?

https://fgheysels.github.io/


Verwijderd

Uit de naam van de dataset maak ik op dat jij een typed dataset hebt. Matched het formaat van de data die je in het XmlDataDocument leest eigenlijk wel met het schema van de dataset qua naamgeving?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Als het letterlijk het voorbeeld uit de MSDN pagina is, denk ik dat je er wel mag vanuit gaan. Althans, ik heb het ook zo met success getest

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 08 mei 2007 @ 22:03:
Als het letterlijk het voorbeeld uit de MSDN pagina is, denk ik dat je er wel mag vanuit gaan. Althans, ik heb het ook zo met success getest
Heb het over de structuur/XSD van de XML die ingelezen wordt en de XSD waarop de dataset is gebaseerd. Die zou wel eens niet overeen kunnen komen. Ik weet alleen niet wat er gebeurd als dit het geval is.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Verwijderd schreef op dinsdag 08 mei 2007 @ 22:06:
[...]


Heb het over de structuur/XSD van de XML die ingelezen wordt en de XSD waarop de dataset is gebaseerd. Die zou wel eens niet overeen kunnen komen. Ik weet alleen niet wat er gebeurd als dit het geval is.
Wel, die xsd en de data van de xml file die ingelezen wordt, is allemaal terug te vinden op die pagina op de MSDN. En met die data heb ik het dus ook getest, dus het werkt gewoon.

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 08 mei 2007 @ 22:08:
[...]

Wel, die xsd en de data van de xml file die ingelezen wordt, is allemaal terug te vinden op die pagina op de MSDN. En met die data heb ik het dus ook getest, dus het werkt gewoon.
Ah, ik had de link niet gechecked :P Meestal ontbreken dat soort zaken nu net op de MSDN pagina's. Dan weet ik het idd ook niet beter dan dat het zou moeten werken.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Ik heb het thuis even geprobeerd, ook hier een lege datatable. Ik print de orderID's in de tabel uit in een foreach loop, maar heb ook dmv een watch gecontroleerd wat er in de dataset staat. Het enige wat ik overigens wel anders heb gedaan is dat ik de dataset heb gemaakt met de dataset designer ipv met xsd.exe genereren, zou dat het kunnen zijn? Ik heb hier een test projectje neergezet, als iemand zou kunnen kijken wat die bij jullie doet? Bij voorbaat dank.

Roomba E5 te koop


Verwijderd

Ik zit er even naar te kijken en de XML viel mij meteen op.

Dit is wat de DataSet ieg snapt:
XML:
1
2
3
4
5
6
7
<?xml version="1.0" standalone="yes"?>
<DataSet xmlns="http://tempuri.org/DataSet.xsd">
  <OrderDetails>
    <OrderID>5</OrderID>
    <ProductID>6</ProductID>
  </OrderDetails>
</DataSet>


Dit is jouw XML:
XML:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<Customer>
  <Name>Dirk</Name>
  <OrderDetails>
    <OrderID>1</OrderID>
    <ProductID>1</ProductID>
  </OrderDetails>
</Customer>


Volgens de MSDN zou het inderdaad moeten werken. Maar ik zie het zo ook niet...

[ Voor 11% gewijzigd door Verwijderd op 08-05-2007 22:34 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Back @ work..

@Exiss: dit heb ik thuis ook kunnen reproduceren inderdaad, hier op werk heeft ie daar ook nog niet zoveel zin in. Ik ga nog even verder kijken...

Edit:
Ik ben er nog even mee bezig geweest, en het heeft inderdaad met de regel
code:
1
<DataSet xmlns="http://tempuri.org/DataSet.xsd">

te maken. Als ik de regel toevoeg doet ie het wel.
Dit levert alleen het probleem op dat het in de situatie waarvoor ik dit wil gebruiken het absoluut niet wenselijk is de xml te veranderen.

[ Voor 51% gewijzigd door sig69 op 09-05-2007 09:13 ]

Roomba E5 te koop


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Het is opgelost! In de dataset designer stond in de properties bij namespace nog "http://tempuri.org/DataSet.xsd", vandaar dat het niet werkte.
Dank aan Exiss die onbewust het duwtje in de goede richting heeft gegeven.

Roomba E5 te koop


Verwijderd

sig69 schreef op woensdag 09 mei 2007 @ 13:53:
Het is opgelost! In de dataset designer stond in de properties bij namespace nog "http://tempuri.org/DataSet.xsd", vandaar dat het niet werkte.
Dank aan Exiss die onbewust het duwtje in de goede richting heeft gegeven.
:D

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Ok, volgende probleem. Neem het volgende xml bestand:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<Business>
    <Company Name="Comapny1">
        <Current>
            <Customers>
                <Item Name="Dirk" Location="Delft" />
                <Item Name="Arjan" Location="Amsterdam" />
                <Item Name="Lisa" Location="Zwaag" />
            </Customers>
            <Products>
                <Item Name="Product1" Price ="12.00" ProductCode="DGEJXI" />
                <Item Name="Product2" Price ="23.24" ProductCode="DWHFIC" />
                <Item Name="Product3" Price ="15.00" ProductCode="DWFJED" />
            </Products>
        </Current>
        <Old>
            <Customers>
                <Item Name="Mark" Location="WolfHeze" />
                <Item Name="Vera" Location="Rotterdam" />
            </Customers>
        </Old>
    </Company>
</Business>


Dit levert 2 problemen op:
-Zowel de Customers onder "Current" en "Old" worden in de datatable geplaats, terwijl alleen "Current" gewenst is
-Het xml document bevat meerdere definities met dezelfde naam (Customers/Item en Products/Item). Deze zouden in aparte datatables moeten komen.

Ik moet dus op de een of andere manier specifieker kunnen selecteren wat er ingelezen moet worden, en types "mappen": Customers/Item -> Customers datatable en Products/Item -> Products datatable. Volgens mij is dit met een XmlDataDocument niet mogelijk? Na wat stoeien met de dataset en xsd file begin ik steeds meer het gevoel te krijgen dat dit iets teveel gevraagd is. Iemand andere suggesties? (Of uiteraard de gouden tip hoe het wel zou kunnen werken zo ;) )

Roomba E5 te koop

Pagina: 1