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

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

我收到以下错误消息:

编辑:

推荐答案

许多浏览器功能,比如DOM操作或XHR,在NodeJ上都不可用,因为这不是访问DOM的典型服务器任务——您必须使用外部库来实现这一点.

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

  • 100:实现DOM级别4,即the latest DOM standard,所以在现代浏览器上可以做的所有事情,都可以在jsdom中完成.它是在 node 上执行浏览器操作的事实上的行业标准,由Mocha、Vue Test Utils、Webpack Prerender SPA插件和许多其他应用程序使用:

    const jsdom = require("jsdom");
    const dom = new jsdom.JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    dom.window.document.querySelector("p").textContent; // 'Hello world'
    
  • 100:如果可以 Select 使用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';
    
  • 100:与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'
    
  • 100:htmlparser2基于HTML DOM解析实现jQuery:

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

  • 100:基于正则表达式的DOM解析器,实现了一些DOM方法,比如getElementById.因为用正则表达式解析HTML是a very bad idea,所以我不建议在生产中使用这种方法.

Node.js相关问答推荐

promise 所有映射或反对

无法使用Sequelize连接AWS RDS

通过PutObjectCommand上传AWS S3 PDF文件,结果为空PDF

Node fetch 实现似乎与 Deno 和 Bun 不同,导致网站没有返回响应?

在 MacOS Ventura 上使用 NVM 安装 node ?

如何使用 $PATH 变量在系统中全局自动安装 bash 脚本?或者重写脚本到node

React Native:执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

获取数组的至少一个元素包含子字符串的文档

NestJS 共享模块的问题

如何在 cypress 测试中进行计算

使用 mongoose 查找过go 7 天的注册用户总数

Web3.js 脚本在监听 CreatedPairs 时退出

来自 Node-aws 的 Dynamo Local:所有操作都失败无法对不存在的表执行操作

调用 require 时的 const vs let

将 myproject/.npmrc 与注册表一起使用

如何可靠地散列 JavaScript 对象?

处理快速异步中间件中的错误

Node.js - 判断是否安装了模块而不实际需要它

Puppeteer 等待所有图像加载然后截图