[.net] achterhalen locatie van XmlNode.

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

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Is het mogelijk om de locatie in het document (dus line en column) te achterhalen voor een XmlNode? Ik ben al even aan het bladeren maar tot zover heb ik nog niets kunnen vinden. De reden dat ik het nodig heb is dat ik betere foutmeldingen wil geven waarin de locatie waar de fout zich voortdoet ook vermeld staat.

  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 11:28

dotcode

///\00/\\

Dat hangt helemaal van je xml structuur af of je het zo kan vinden. Als je elke nod uniek kan identificeren :) is het makelijk. Wat je ook kan doen is een tijdelijke marker in de node zetten die mis is. Daarna dinamisch de xpath query opbouwen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
dotcode schreef op dinsdag 14 december 2004 @ 15:10:
Dat hangt helemaal van je xml structuur af of je het zo kan vinden.
Maar er is niet een of andere functie:

Position pos = xmlDocument.getPosition(node);

Die informatie wordt standaard nergens bijgehouden???
Als je elke nod uniek kan identificeren :) is het makelijk.
Die garantie kan ik niet geven.
Wat je ook kan doen is een tijdelijke marker in de node zetten die mis is. Daarna dinamisch de xpath query opbouwen.
Jezus wat een geneuzel.. Ok.. dan ga ik wel een keer in de toekomst alle locaties van alle nodes in het document in een container kwakken zodat ik de locaties kan uitlezen... (Zo doe ik het ook met mijn parser generator SableCC)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Is het niet iets wat at parse-time al opgelost kan worden door validatie van je xml document, bijv. door schema's ofzo?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
drm schreef op dinsdag 14 december 2004 @ 16:08:
Is het niet iets wat at parse-time al opgelost kan worden door validatie van je xml document, bijv. door schema's ofzo?
Nee... Validatie mbv schema lost maar een beperkte hoeveelheid problemen op. Stel dat je bv database checks moet doen, dan kan je dat niet in Schema oplossen. Ik heb dus zulke problemen die zich niet laten vertalen in een schema.. Dus ik wil zelf ook fouten opwerpen.... en om informatieve fouten op te werpen wil ik positie er bij hebben.... Hou zou jij het vinden als jouw compiler geen melding geeft waar de fout is opgetreden???

[ Voor 28% gewijzigd door Alarmnummer op 14-12-2004 16:13 ]


  • schoene
  • Registratie: Maart 2003
  • Laatst online: 10:50
Hmmm,

aangezien

XML:
1
<hoofdnode><subnode1>text</subnode1><subnode2>text</subnode2></hoofdnode>

en
XML:
1
2
3
4
<hoofdnode>
  <subnode1>text</subnode1>
  <subnode2>text</subnode2>
</hoofdnode>


dezelfde betekenis hebben, zou het me niet onlogisch lijken dat dit niet mogelijk is.

(firefox laat wel zien waar de fout zich bevindt, maar dit gebeurt volgens mij tijdens het
parsen van de file, en is het niet zo in .Net dat er een exception wordt geworpen als je een
foute xml-file parsed?)

edit: eigenlijk zijn de 2 voorbeeldjes toch niet helemaal gelijk, aangezien de hoofdnode in het 1e gval enkel 2 subnodes heeft, maar in het 2e geval ook nog eens 3 tekstgedeelten

[ Voor 24% gewijzigd door schoene op 14-12-2004 16:22 ]


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19-02 14:18

pjvandesande

GC.Collect(head);

Bij een XmlTextReader kun je de line en position opvragen, zijn gewoon public properties. En een XmlException bevat deze informatie ook altijd.

Of gebruik je het helemaal niet zo.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
schoene schreef op dinsdag 14 december 2004 @ 16:19:
Hmmm,

aangezien

XML:
1
<hoofdnode><subnode1>text</subnode1><subnode2>text</subnode2></hoofdnode>

en
XML:
1
2
3
4
<hoofdnode>
  <subnode1>text</subnode1>
  <subnode2>text</subnode2>
</hoofdnode>


dezelfde betekenis hebben, zou het me niet onlogisch lijken dat dit niet mogelijk is.
Onzin... En parser kan gerust bij het parsen van xmlnodes informatie over de locatie van die nodes meenemen. En dan mag tekst best inhoudelijk hetzelfde zijn.. maar qua format van de tekst helemaal anders.
(firefox laat wel zien waar de fout zich bevindt, maar dit gebeurt volgens mij tijdens het
parsen van de file, en is het niet zo in .Net dat er een exception wordt geworpen als je een
foute xml-file parsed?)
Lees mijn topic volgende keer even goed voordat je antwoord geeft.
Alarmnummer schreef op dinsdag 14 december 2004 @ 16:11:
[...]


Nee... Validatie mbv schema lost maar een beperkte hoeveelheid problemen op. Stel dat je bv database checks moet doen, dan kan je dat niet in Schema oplossen. Ik heb dus zulke problemen die zich niet laten vertalen in een schema.. Dus ik wil zelf ook fouten opwerpen.... en om informatieve fouten op te werpen wil ik positie er bij hebben.... Hou zou jij het vinden als jouw compiler geen melding geeft waar de fout is opgetreden???
edit: eigenlijk zijn de 2 voorbeeldjes toch niet helemaal gelijk, aangezien de hoofdnode in het 1e gval enkel 2 subnodes heeft, maar in het 2e geval ook nog eens 3 tekstgedeelten
Ahhh.. en volgens dezelfde argumentering zou een normale (java bv) parser ook geen goeie foutmelding (inclusief regelnummer) kunnen opwerpen bij

int a="foo";
int b=true;

[ Voor 36% gewijzigd door Alarmnummer op 14-12-2004 17:14 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
questa schreef op dinsdag 14 december 2004 @ 16:49:
Bij een XmlTextReader kun je de line en position opvragen, zijn gewoon public properties. En een XmlException bevat deze informatie ook altijd.

Of gebruik je het helemaal niet zo.
Nog niet helemaal, maar ik zal er ffies naar kieken.

[ Voor 5% gewijzigd door Alarmnummer op 14-12-2004 17:12 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Alarmnummer:
Nee... Validatie mbv schema lost maar een beperkte hoeveelheid problemen op. Stel dat je bv database checks moet doen, dan kan je dat niet in Schema oplossen.
Aardig voorbeeld, ja :)
Ik heb dus zulke problemen die zich niet laten vertalen in een schema.. Dus ik wil zelf ook fouten opwerpen.... en om informatieve fouten op te werpen wil ik positie er bij hebben.... Hou zou jij het vinden als jouw compiler geen melding geeft waar de fout is opgetreden???
Hej, ik doe vooral veel PHP, don't ask me :+ :P Point taken tho ;)
schoene:
edit: eigenlijk zijn de 2 voorbeeldjes toch niet helemaal gelijk, aangezien de hoofdnode in het 1e gval enkel 2 subnodes heeft, maar in het 2e geval ook nog eens 3 tekstgedeelten
Choeso jei, 't verschil is dat een (stricte) parser normaal gesproken voor de stukken whitespace in je 2e voorbeeldje text nodes aanmaakt met een whitespace inhoud (bijvoorbeeld [LF][CR][TAB], oid). Er is dus wel degelijk verschil tussen de documenten.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 23-02 22:19

alienfruit

the alien you never expected

Misschien heb je wat aan onderstaande link, het gaat over het uitbreiden van de DOM
. Check ook de voorbeeld: Extending DOM

[ Voor 81% gewijzigd door alienfruit op 14-12-2004 20:22 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik zal er eens naar kijken.

Weet iemand trouwens ook hoe ik de layout van een XML bestand goed kan krijgen als ik het document volledig in c# aan het opbouwen ben? Op dit moment voegt hij geen enters en tabs doe en staat alles mooi op 1 regel als ik het naar bv de console wegschrijf.

[ Voor 9% gewijzigd door Alarmnummer op 15-12-2004 08:14 ]


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19-02 14:18

pjvandesande

GC.Collect(head);

XmlTextWriter.Formatting Property, werkt prima en nogmaals, je kan bij een XmlTextWriter ook altijd de currentline en position opvragen. Hoe schrijf jij nu alles weg?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
questa schreef op woensdag 15 december 2004 @ 08:49:
XmlTextWriter.Formatting Property, werkt prima en nogmaals, je kan bij een XmlTextWriter ook altijd de
Ik maak op dit moment gebruik van een XmlDocument die alle nodes aanmaakt en ik link zelf de childnodes met de parent nodes. En na afloop vraag ik aan het XmlDocument.. innerXml geloof ik.

En ik ben de posities nodig bij het lezen (niet bij het schrijven) en zal straks even kijken naar die XmlTextReader.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19-02 14:18

pjvandesande

GC.Collect(head);

XmlDocument kent volgens mij geen Formatting, maar de Save method neemt een XmlWriter als argument en XmlTextWriter is afgeleid van de XmlWriter.
Pagina: 1