尝试将 DOMParser 与节点 js 一起使用

2022-08-30 05:15:15

当我尝试在我的js代码中使用DOMParser时,我遇到了问题。在我的代码中,我通过 xmlhttp.responseText soap 响应检索 xml 文件。我希望能够以JSON格式访问其元素,因此我的代码如下所示:

var xml = new DOMParser();
xml = xml.parseFromString(xmlhttp.responseText, 'text/xml');
var result = xmlToJson(xml);

我收到此错误消息: 引用错误: DOMParser 未定义

编辑:这个链接对我不起作用,因为我的javascript不在HTML页面中,因为它是一个节点.js文件。JavaScript DOMParser 访问 innerHTML 和其他属性


答案 1

许多浏览器功能,如DOM操作或XHR,在NodeJS本身不可用,因为这不是访问DOM的典型服务器任务 - 你必须使用外部库来做到这一点。

DOM容量很大程度上取决于库,以下是您可以使用的主要工具的快速比较:

  • jsdom:实现DOM级别4,这是最新的DOM标准,所以你在现代浏览器上可以做的所有事情,你都可以在.它是在 Node 上执行浏览器操作的事实行业标准,由 Mocha、Vue Test Utils、Webpack Prerender SPA 插件和许多其他工具使用:jsdom

    const jsdom = require("jsdom");
    const dom = new jsdom.JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    dom.window.document.querySelector("p").textContent; // 'Hello world'
    
  • deno_dom:如果使用Deno而不是Node是一个选项,则此库提供DOM解析功能:

    import { DOMParser } from "https://deno.land/x/deno_dom/deno-dom-wasm.ts";
    const parser = new DOMParser();
    const document = parser.parseFromString('<p>Hello world</p>', 'text/html');
    document.querySelector('p').textContent; // 'Hello world';
    
  • htmlparser2:与 jsdom 相同,但以更复杂的 API 为代价,具有增强的性能和灵活性:

    const htmlparser = require("htmlparser2");
    const parser = new htmlparser.Parser({
      onopentag: (name, attrib) => {
        if (name=='p') console.log('a paragraph element is opening');
      }
    }, {decodeEntities: true});
    parser.write(`<!DOCTYPE html><p>Hello world</p>`);
    parser.end();
    // console output: 'a paragraph element is opening'
    
  • cheerio:基于HTML DOM解析的jQuery的实现::htmlparser2

    const cheerio = require('cheerio');
    const $ = cheerio.load(`<!DOCTYPE html><p>Hello world</p>`);
    $('p').text('Bye moon');
    $.html(); // '<!DOCTYPE html><p>Bye moon</p>'
    
  • xmldom:完全实现 DOM 级别 2,部分实现 DOM 级别 3。适用于 HTML,也适用于 XML

  • dom-parser:基于正则表达式的 DOM 解析器,实现了一些 DOM 方法,如 .由于使用正则表达式解析HTML是一个非常糟糕的主意,因此我不建议将此用于生产。getElementById


答案 2

节点中没有.js,这是浏览器的事情。不过,您可以尝试以下任何模块:DOMParser

https://github.com/joyent/node/wiki/modules#wiki-parsers-xml