2012-07-27 13 views
5

Próbuję użyć jQuery parseXML w node.jsJak mogę uczynić pracę jQuery.parseXML w node.js

otrzymuję ten błąd:

Error: Invalid XML: <?xml version="1.0"... 

Ale problem jest nie w XML

problemem jest do węzłów jquery.js:

parseXML: function(data) { 
     if (typeof data !== "string" || !data) { 
      return null; 
     } 
     var xml, tmp; 
     try { 
      if (window.DOMParser) { // Standard 
       tmp = new DOMParser(); 
       xml = tmp.parseFromString(data , "text/xml"); 
      } else { // IE 
       xml = new ActiveXObject("Microsoft.XMLDOM"); 
       xml.async = "false"; 
       xml.loadXML(data); 
      } 
     } catch(e) { 
      xml = undefined; 
     } 
     if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { 
      jQuery.error("Invalid XML: " + data); 
     } 
     return xml; 
    }, 

Mówiąc prościej, w node.js, nie ma DOMParser, i nie ma ActiveXObject ("Microsoft.XMLDOM")

Odkąd pracuję w oknach, spodziewam ActiveXObject do pracy, ale nie, to nie rzeczywisty błąd połknięte przez jQuery nie jest nieważny XML jest to, że nie jest zdefiniowana ActiveXObject:

ReferenceError: ActiveXObject is not defined 
at Module._compile (module.js:449:26) 
at Object.Module._extensions..js (module.js:467:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:312:12) 
at Module.runMain (module.js:492:10) 
at process.startup.processNextTick.process._tickCallback (node.js:244: 

żadnego obejścia tego? Jak mogę wykonać jQuery.parseXML?

Odpowiedz

6

Miałem wielki sukces przy użyciu xmldom. Spójrz. Wygląda na to, że parsujesz plik XML, tak jak byś się spodziewał $.parseXML. Miałem także problemy z parser jquery i przełączony na ten po wypróbowaniu kilka.

1

To wygląda na coś, co należałoby wprowadzić w jądro nodejs. Sugerowałbym użycie modułu zaprojektowanego do parsowania XML.

https://github.com/Leonidas-from-XIV/node-xml2js

Czy trzeba jQuery.parseXML do pracy, jak starasz się pisać kod przejść do przeglądarki i uruchomić na serwerze?

Można zapewne narazić node-xml2js w przeglądarce z browserify

Istnieje również libxmljs który wydaje się być bardziej niż jak XML węzłów xml2js.

+0

Używam tego samego modułu (node-xml2js) i to po prostu działa. –

5

Jeśli chcesz nadal używać jQuery.parseXML bez konieczności wprowadzania zmian w kodzie (np. Jeśli chcesz mieć możliwość uruchamiania tego samego javascript zarówno po stronie klienta, jak iw Node.js), to jest on łatwy do ustawienia to w górę. Moduł xmldom wymieniony w M. Laing’s answer udostępnia konstruktorowi DOMParser, którego jQuery może używać w przeglądarce w ten sam sposób, w jaki korzysta z niego DOMParser. Oto jak to zrobić:

Najpierw należy zainstalować xmldom:

npm install xmldom --save 

Zakładając masz już jQuery 2.1.x lub nowszej pracy w node.js (instrukcje dotyczące ustawiania się, że można znaleźć w README w this repository), można teraz po prostu wymagają xmldom i narażać swoje DOMParser konstruktora jako globalny:

global.DOMParser = require('xmldom').DOMParser; 

jQuery będzie teraz w stanie skutecznie parseXML.