Node.js en JSON <-> XML

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
offtopic:
@modje: Ik hoop dat dit topic goed is geplaatst. Want hoewel JavaScript is Node.js toch serversided scripting. Past dit beter in SEA of iets anders, schroom niet om het te verplaatsen. :)


Ik ben steeds meer bezig met XML in Node.js, en ik vind het zo handig om gewoon een JS object om te kunnen zetten naar XML. Dan hoef ik er niet zo bij na te denken.

Als je het relatief simpel houdt dan zijn twee hele handige libraries[list]• xml2js• https://github.com/Leonidas-from-XIV/node-xml2js• En het onafhankelijke Js2Xml• https://github.com/philjackson/js2xml

Met xml2Js kan je heel makkelijk een XML document omzetten naar een object:
code:
1
2
3
4
5
6
7
8
9
var fs = require('fs'),
    xml2js = require('xml2js');

var parser = new xml2js.Parser();
fs.readFile('/foo.xml', function(err, data) {
    parser.parseString(data, function (err, result) {
        console.log(JSON.stringify(result));
    });
});


Js2Xml is precies omgekeerd, je kan een object omzetten naar Xml:
code:
1
2
3
4
5
6
7
8
9
10
var Js2Xml = require("js2xml").Js2Xml;

var person = {
  name: "Phil Jackson",
  mood: "Bored",
  stuff: { one: { two: "three" } }
};

var js2xml = new Js2Xml("person", person);
js2xml.toString();


Maar het vervelende is, ik wil nu met attributen werken, en Js2Xml ondersteunt geen attributen. Omdat iedereen net als ik liever makkelijk dan moeilijk doet, ging ik er vanuit dat er nog wel tien dergelijke libraries waren, maar ik kan gewoon helemaal niets vinden.

Iedereen heeft het maar over XmlDom en SAX, maar die parsers en voorbeelden werken met allemaal onDit() onDat() (bijvoorbeeld bij SAX) wat ongetwijfeld in bepaalde situaties handig is - bijvoorbeeld als je XML heel langzaam binnenkomt en je wilt er alvast wat mee doen - maar voor mijn usecase die gister nog makkelijk was wordt opeens erg 'lelijk' alsof ik met een hooivork en een hooiberg bezig moet terwijl ik alleen een slokje water wil nemen. ( :? )

Terug naar mijn stelling dat iedereen liever makkelijk dan moeilijk doet en dat ik meer libraries had verwacht die iets soortgelijks doen; zou het misschien zo zijn dat iedereen een hele simpele methode loopt te gebruiken die ik niet ken en wegens gebrek aan sleutelwoordenkennis en duckduckgo-skills nog niet tegen ben gekomen?

Of is er juist wel een library die ik zoek die het zelfde doet maar wel attributen ondersteunt?

🇪🇺 Buy from EU (GoT)


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 31-05 09:09
Wat je moet onthouden bij SAX-gebaseerde parsers is dat ze zgn 'streaming' zijn, dwz dat ze in principe XML documenten van onbeperkte lengte kunnen lezen en schrijven. De andere variant, DOM-gebaseerde parsers, lezen eerst het volledige XML document, vertalen hem in een document tree, en zetten het in het geheugen.

Waarschijnlijk moet je gewoon doorzoeken mbt parser libraries; zoals jezelf en js2xml aangeeft ondersteunt het geen namespaces en attributes, waarschijnlijk omdat het zo eenvoudig mogelijk een 1 op 1 mapping van JSON <-> XML wil maken (om bijv. webservices in de twee formaten aan te bieden). Daar JSON geen attributes en namespaces kent is het voor die use case ook overbodig.

Op de NodeJS wiki staat een lijst met ~17 XML parsers, o.a. met parsers gebaseerd op de W3C standaarden (die ook attributen aangeeft); toch daar maar naar kijken. Op een bepaald punt moet je toch aangeven welk deel van je JSON een element is en welke een attribuut.

Pure SAX-achtige code schrijven is idd saai en kan veel lelijke code opleveren als je niet uitkijkt, maar als de bovenstaande libs niet doen wat je wilt blijft dat de laatste optie.

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 20:41
Kijk hier eens naar. Niet met sax, maar gewoon simpel js2xml scriptje dat compatible is met xml2js

Acties:
  • 0 Henk 'm!

  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
@YopY Ah streaming noem je dat? In ieder geval is dat een beetje wat ik bedoelde met langzaam binnenkomende xml. Thanks voor de uitleg. :) XmlDom is vast handig voor bepaalde doeleinden, maar in het voorbeeld is het weer expliciet addDingetje en setDingetje, net als die omslachtige xml parser die standaard bij php zit.
creator1988 schreef op donderdag 03 mei 2012 @ 11:28:
Kijk hier eens naar. Niet met sax, maar gewoon simpel js2xml scriptje dat compatible is met xml2js
Dat is echt (op het eerste gezicht) exact wat ik zoek, hoe heb je dat gevonden? _/-\o_
Deze haalt attributen ook uit @ net als waar xml2js ze instopt.

Kijk eens aan dit is toch ideaal.

🇪🇺 Buy from EU (GoT)