我在js代码中try 使用DOMParser时遇到了问题.在我的代码中,我通过xmlhttp检索xml文件.responseText soap响应.我希望能够以JSON格式访问其元素,因此我的代码如下所示:
var xml = new DOMParser();
xml = xml.parseFromString(xmlhttp.responseText, 'text/xml');
var result = xmlToJson(xml);
我收到以下错误消息:
编辑:
我在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,所以我不建议在生产中使用这种方法.