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

时间:2012-07-27 23:23:53

标签: jquery node.js xml-parsing activex

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

我收到此错误:

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

但问题是

中的

问题出在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工作?

3 个答案:

答案 0 :(得分:6)

我使用xmldom取得了巨大成功。看一看。它似乎像你期望$.parseXML一样解析xml。我也遇到了jquery解析器的问题,并在尝试了一堆之后切换到了这个问题。

答案 1 :(得分:5)

如果您想继续使用jQuery.parseXML而无需对代码进行任何更改(例如,如果您希望能够在客户端和Node.js中运行相同的javascript),那么很容易设置。 xmldom中提到的M. Laing’s answer模块公开了一个DOMParser构造函数,jQuery可以使用它在浏览器中使用DOMParser的相同方式。以下是如何操作:

首先,安装xmldom:

npm install xmldom --save

假设您已经在Node.js中使用了jQuery 2.1.x或更高版本(有关设置它的说明,请参阅this repository中的自述文件),您现在只需要xmldom并公开其{{1}构造函数作为全局:

DOMParser

jQuery现在能够成功global.DOMParser = require('xmldom').DOMParser;

答案 2 :(得分:1)

这看起来是必须在nodejs的核心中实现的东西。我建议使用一个用于解析XML的模块。

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

您是否需要使用jQuery.parseXML,就像您尝试编写代码以交叉进入浏览器并在服务器上运行一样?

您可以使用node-xml2js

在浏览器中公开browserify

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