我如何使jQuery.parseXML在node.js中工作

我正在尝试在node.js中使用jQuery parseXml

我得到这个错误:

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

但问题在于XML

问题出在node-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; }, 

简单地说,在node.js中,没有DOMParser ,也没有ActiveXObject(“Microsoft.XMLDOM”)

由于我在Windows中工作,我希望ActiveXObject工作,但不,它不会,实际的错误由jQuery吞没不是一个无效的XML,它的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: 

任何解决方法? 我如何使jQuery.parseXML工作?

我用xmldom取得了巨大的成功。 看一看。 它似乎分析一个XML就像你会期望$.parseXML 。 我也遇到了jQueryparsing器的问题,并尝试了一堆后切换到这一个。

如果你想继续使用jQuery.parseXML而不必对你的代码做任何改变(就像你希望能够在Node.js中运行相同的javascript一样),那么很容易就可以设置它。 M. Laing的答案中提到的xmldom模块暴露了一个DOMParser构造函数,jQuery可以使用它在浏览器中使用DOMParser的相同方式。 这是如何做到的:

首先,安装xmldom:

 npm install xmldom --save 

假设您已经在Node.js中使用jQuery 2.1.x或更高版本(有关设置的说明,请参阅此存储库中的README),现在只需要xmldom并将其DOMParser构造函数公开为全局:

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

jQuery现在将能够成功parseXML

这看起来是必须实施到nodejs的核心。 我会build议使用一个devise来parsingXML的模块。

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

你需要jQuery.parseXML工作,就像你想编写代码跨浏览器并在服务器上运行?

你可以用browserify在浏览器中暴露node-xml2js

还有libxmljs似乎比node-xml2js更像XML。