[C#, XML]Probleem met weergave XML

Pagina: 1
Acties:
  • 156 views sinds 30-01-2008
  • Reageer

  • illstid
  • Registratie: Oktober 2005
  • Laatst online: 11-01-2024
Hallo beste mede tweakers,

Hopelijk kunnen jullie mij helpen met het volgende probleem.

Met een XPathNavigator heb ik de select functie gebruikt om data uit XML te filteren.

code:
1
2
3
4
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
            expr = nav.Compile("/NewDataSet/Table[CustomerName='Sjaak' or CustomerName='Achmed']");
            XPathNodeIterator iterator = nav.Select(expr);


Het filteren werkt, maar nu wil ik aan de hand van deze resultaten dezelfde XML layout generen. Dit lukt niet met de huidige code, in de debug krijg ik een error omdat er XML hoofdelementen mist. (dus eigenlijk de rest van de XML structuur namelijk: <NewDataSet></NewDataSet>).

[Edit] Error krijg ik op het moment dat ik de nieuwe XML in een dataset probeer in te lezen, met:
code:
1
DataSet.ReadXml(new StringReader(strXML));



Hopelijk kunnen jullie mij helpen met dit probleem.

Alvast bedankt. _/-\o_

[ Voor 9% gewijzigd door illstid op 09-11-2006 16:00 ]


  • pjonk
  • Registratie: November 2000
  • Laatst online: 22-11 20:39
Wat is de exacte foutmelding? Die hoofdelementen heb je natuurlijk wel nodig om een XML file een DataSet in te kunnen lezen. Ik vraag me af wat je precies wilt bereiken. Als je een DataSet wilt filteren kun je het beste een DataView gebruiken en daarop een RowFilter o.i.d. toepassen. Daarna kun je altijd weer de XML ophalen van die gefilterde dataset.

It’s nice to be important but it’s more important to be nice


  • illstid
  • Registratie: Oktober 2005
  • Laatst online: 11-01-2024
pjonk schreef op donderdag 09 november 2006 @ 16:10:
Wat is de exacte foutmelding? Die hoofdelementen heb je natuurlijk wel nodig om een XML file een DataSet in te kunnen lezen. Ik vraag me af wat je precies wilt bereiken. Als je een DataSet wilt filteren kun je het beste een DataView gebruiken en daarop een RowFilter o.i.d. toepassen. Daarna kun je altijd weer de XML ophalen van die gefilterde dataset.
Ik ben bezig een securitylayer te maken, maar ik wil deze zo generiek mogelijk maken door gebruik van XML. Op deze manier is systeem integratie makkelijker mogelijk met andere programmeer talen.

De foutmelding is de volgende:

System.Xml.XmlException was unhandled
Message="Er zijn meerdere hoofdelementen. Regel 16, positie 10."
Source="System.Xml"
LineNumber=16
LinePosition=10
SourceUri=""


Zo zou het eruit moeten zien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<NewDataSet>
  <Table>
    <CustomerAID>10000001</CustomerAID>
    <CustomerName>Sjaak</CustomerName>
    <CustomerInitials>S.L.D.</CustomerInitials>
    <CustomerAddress>Flapperstraat</CustomerAddress>
    <CustomerHouseNumber>99</CustomerHouseNumber>
    <CustomerPostalCode>2190XX</CustomerPostalCode>
    <CustomerPOBox>-</CustomerPOBox>
    <CustomerPOBoxPostalCode>-</CustomerPOBoxPostalCode>
    <CustomerCity>SinCity</CustomerCity>
    <CustomerCountry>Verwegistan</CustomerCountry>
    <CustomerTelephone>72178942</CustomerTelephone>
    <CustomerFax>82349754</CustomerFax>
    <CustomerMobile>78934732905</CustomerMobile>
    <CustomerEmail>bla@bla.com</CustomerEmail>
  </Table>
  <Table>
    <CustomerAID>10000002</CustomerAID>
    <CustomerName>Sjonny</CustomerName>
    <CustomerInitials>P.S.R</CustomerInitials>
    <CustomerAddress>Sjonnystraat</CustomerAddress>
    <CustomerHouseNumber>09</CustomerHouseNumber>
    <CustomerPostalCode>4545WIET</CustomerPostalCode>
    <CustomerPOBox>-</CustomerPOBox>
    <CustomerPOBoxPostalCode>-</CustomerPOBoxPostalCode>
    <CustomerCity>WietStad</CustomerCity>
    <CustomerCountry>DeLageLanden</CustomerCountry>
    <CustomerTelephone>542390</CustomerTelephone>
    <CustomerFax>93487289</CustomerFax>
    <CustomerMobile>43892759857</CustomerMobile>
    <CustomerEmail>sjonny@sjaakensjonny.com</CustomerEmail>
  </Table>
</NewDataSet>



De XML zoals ik hem nu krijg ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  <Table>
    <CustomerAID>10000001</CustomerAID>
    <CustomerName>Sjaak</CustomerName>
    <CustomerInitials>S.L.D.</CustomerInitials>
    <CustomerAddress>Flapperstraat</CustomerAddress>
    <CustomerHouseNumber>99</CustomerHouseNumber>
    <CustomerPostalCode>2190XX</CustomerPostalCode>
    <CustomerPOBox>-</CustomerPOBox>
    <CustomerPOBoxPostalCode>-</CustomerPOBoxPostalCode>
    <CustomerCity>SinCity</CustomerCity>
    <CustomerCountry>Verwegistan</CustomerCountry>
    <CustomerTelephone>72178942</CustomerTelephone>
    <CustomerFax>82349754</CustomerFax>
    <CustomerMobile>78934732905</CustomerMobile>
    <CustomerEmail>bla@bla.com</CustomerEmail>
  </Table>
  <Table>
    <CustomerAID>10000002</CustomerAID>
    <CustomerName>Sjonny</CustomerName>
    <CustomerInitials>P.S.R</CustomerInitials>
    <CustomerAddress>Sjonnystraat</CustomerAddress>
    <CustomerHouseNumber>09</CustomerHouseNumber>
    <CustomerPostalCode>4545WIET</CustomerPostalCode>
    <CustomerPOBox>-</CustomerPOBox>
    <CustomerPOBoxPostalCode>-</CustomerPOBoxPostalCode>
    <CustomerCity>WietStad</CustomerCity>
    <CustomerCountry>DeLageLanden</CustomerCountry>
    <CustomerTelephone>542390</CustomerTelephone>
    <CustomerFax>93487289</CustomerFax>
    <CustomerMobile>43892759857</CustomerMobile>
    <CustomerEmail>sjonny@sjaakensjonny.com</CustomerEmail>
  </Table>



Troep is uit de foutmelding gehaald. Alvast bedankt.

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

De foutmelding zegt het al: je root-element mist, je hebt dus geen geldig XML bestand.

  • illstid
  • Registratie: Oktober 2005
  • Laatst online: 11-01-2024
PhysicsRules schreef op donderdag 09 november 2006 @ 17:04:
De foutmelding zegt het al: je root-element mist, je hebt dus geen geldig XML bestand.
Dat staat al in de start topic, vandaar dat ik dit probleem heb gepost mocht iemand instaat zijn hiermee te kunnen helpen.

  • cablepokerface
  • Registratie: Januari 2001
  • Laatst online: 24-02 19:22
Hoi.

Probeer de dataset te gebruiken waarvoor hij bedoeld is: data manipuleren.

code:
1
2
3
4
5
6
7
8
9
DataRow[] MatchedRows = MyDataSet.Select("CustomerName='Sjaak' or CustomerName='Achmed');

DataSet NewDataSet = new DataSet();
NewDataSet.Tables.Add(new DataTable("MyTable"));

foreach (DataRow MyRow in MatchedRows)
  NewDataSet.Tables[0].ImportRow(MyRow);

NewDataSet.GetXml(); // w00t w00t.


uit mijn hoofd getyped dus misschien staan er typefouten in.

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

illstid schreef op donderdag 09 november 2006 @ 17:08:
[...]
Dat staat al in de start topic, vandaar dat ik dit probleem heb gepost mocht iemand instaat zijn hiermee te kunnen helpen.
Oeps, daar had ik overheen gelezen.

Als ik het goed begrijp wil je dus een nieuw XML bestand maken, met alleen de data die voldoet aan je selectiecriteria, maar die wel binnen het oorspronkelijke XML-schema past.

Dan in aanvulling op de vorige post: gebruik de XML classes van .Net om het schema van je oorspronkelijke bestand te copieren (XMLSchemaReader of zo iets).
Pagina: 1