XML met C# SelectSingleNode probleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • tripkip
  • Registratie: Oktober 2008
  • Laatst online: 08-08 07:54
Heej iedereen, ik zit met een lastig probleempje, ik ben nogal beginnend programmeur C#.

Dit is mijn configuratie.xml bestand:

<?xml version="1.0" encoding="utf-8" ?>

<configuratie>
<printer>Adobe PDF</printer>
<uiterlijk>0</uiterlijk>
<kassiers>
<persoon>An Jaspers</persoon>
<persoon>Jos Stappens</persoon>
</kassiers>
</configuratie>

Dit is de code die een null error geeft (De objectverwijzing is niet op een exemplaar van een object ingesteld.):

(using System.IO; using System.Xml

XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "/configuratie.xml");
XmlNode xn = doc.SelectSingleNode("configuratie/printer");
selectedPrinter = xn.InnerText;

Wat doe ik fout? 8)7

Ik dank jullie voor de hulp! _/-\o_

Twitter iCouchPotato


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waarom het wiel opnieuw uit vinden? ;)

Verder: ik weet niet wat C# (of .Net) er mee doet, maar je dient backslashes te gebruiken lijkt me in je bestandspaden (en dus te escapen!)

Verder: gebruik code tags als je code post ;)

[ Voor 50% gewijzigd door RobIII op 05-12-2008 15:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Forcepoint
  • Registratie: Januari 2007
  • Laatst online: 24-09 16:10
Ik denk dat het probleem is dat je de "/" moet escapen in "//". Of voor de string een @ teken zetten.

code:
1
2
doc.Load(Application.StartupPath + "//configuratie.xml");
XmlNode xn = doc.SelectSingleNode("configuratie//printer");

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Forcepoint schreef op vrijdag 05 december 2008 @ 15:20:
Ik denk dat het probleem is dat je de "/" moet escapen in "//". Of voor de string een @ teken zetten.

code:
1
2
doc.Load(Application.StartupPath + "//configuratie.xml");
XmlNode xn = doc.SelectSingleNode("configuratie//printer");
Voor XPath moet je forward slashes gebruiken, bestandspaden backslashes. En forward slashes hoeven niet ge-escaped te worden ;)

C#:
1
2
doc.Load(Application.StartupPath + "\\configuratie.xml");
XmlNode xn = doc.SelectSingleNode("configuratie/printer");


@TS: Oh, en heb je ook gecontroleerd of de xml file wel op "copy always" of "copy if newer" staat i.p.v. "do not copy"?

[ Voor 20% gewijzigd door RobIII op 05-12-2008 15:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Lees even een xpath tutorial door.

En voordat je een node uitleest dien je ook te controleren of je SelectSingleNode() wel een resultaat opleverde

C#:
1
2
3
4
5
6
7
8
XmlNode xn = doc.SelectSingleNode("xpath query");
if (xn == null)
{
  //node niet gevonden. 
  throw new Exception("Configuratie bestand niet correct.");
}

MessageBox.Show(xn.InnerText);



@ForcePoint: In C# hoef je alleen backslashes (\) te escapen. De xpath query van de TS is incorrect en krijgt daarom geen resultaat terug.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Forcepoint
  • Registratie: Januari 2007
  • Laatst online: 24-09 16:10
RobIII schreef op vrijdag 05 december 2008 @ 15:22:
[...]

Voor XPath moet je forward slashes gebruiken, bestandspaden backslashes. En forward slashes hoeven niet ge-escaped te worden ;)

C#:
1
2
doc.Load(Application.StartupPath + "\\configuratie.xml");
XmlNode xn = doc.SelectSingleNode("configuratie/printer");


@TS: Oh, en heb je ook gecontroleerd of de xml file wel op "copy always" of "copy if newer" staat i.p.v. "do not copy"?
Ok, thnx :) Bij nader inzien denk ik dat het filepath geen probleem vormt. Als hij het bestand niet kon laden zou er wel een FileNotFoundException gegeven worden oid.

Acties:
  • 0 Henk 'm!

  • tripkip
  • Registratie: Oktober 2008
  • Laatst online: 08-08 07:54
Wow snelle jongens hier ;)

kijk even mee:

http://img71.imageshack.us/img71/773/knippnh9.jpg

Twitter iCouchPotato


Acties:
  • 0 Henk 'm!

  • tripkip
  • Registratie: Oktober 2008
  • Laatst online: 08-08 07:54
Hij kan de node dus niet vinden... Ik ben hier al 3uur mee bezig :P

Twitter iCouchPotato


Acties:
  • 0 Henk 'm!

  • tripkip
  • Registratie: Oktober 2008
  • Laatst online: 08-08 07:54
Niemand_Anders schreef op vrijdag 05 december 2008 @ 15:26:

@TS: Oh, en heb je ook gecontroleerd of de xml file wel op "copy always" of "copy if newer" staat i.p.v. "do not copy"?
WAAAAT ?! Het is gelukt!!

Dit was dus het probleem 8)7 8)7 8)7

Waarom heb ik dit in geen enkele tutorial gelezen?

Kan iemand me uitleggen waarom dit nu wel lukt?

[ Voor 23% gewijzigd door tripkip op 05-12-2008 15:55 ]

Twitter iCouchPotato


Acties:
  • 0 Henk 'm!

  • Forcepoint
  • Registratie: Januari 2007
  • Laatst online: 24-09 16:10
Mooi dat het gelukt is :)

Als de XML File op "Do Not Copy" staat wil dat zeggen dat hij nooit naar de bin/debug map wordt gekopieerd. Waarschijnlijk stond er eerst in die map een oudere versie van het xml bestand (met waarschijnlijk een andere indeling), waardoor de xpath query fout ging.
Pagina: 1