【问题标题】:How can I make jQuery.parseXML work in node.js如何让 jQuery.parseXML 在 node.js 中工作
【发布时间】:2012-07-26 15:59:18
【问题描述】:

我正在尝试在 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 工作?

【问题讨论】:

    标签: jquery node.js xml-parsing activex


    【解决方案1】:

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

    首先,安装xmldom:

    npm install xmldom --save
    

    假设您已经在 Node.js 中运行了 jQuery 2.1.x 或更高版本(有关设置说明,请参阅 this repository 中的自述文件),您现在可以只需要 xmldom 并将其 DOMParser 构造函数公开为全球:

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

    jQuery 现在可以成功parseXML

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        您是否需要 jQuery.parseXML 才能工作,例如您是否尝试编写代码以跨入浏览器并在服务器上运行?

        您可能会在浏览器中使用browserify 公开node-xml2js

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

        【讨论】:

          猜你喜欢
          • 2014-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多