Ste*_*n D 35 javascript xml node.js
尝试在我的js代码中使用DOMParser时遇到问题.在我的代码中,我通过xmlhttp.responseText soap响应检索xml文件.我希望能够以JSON格式访问其元素,因此我的代码如下所示:
var xml = new DOMParser();
xml = xml.parseFromString(xmlhttp.responseText, 'text/xml');
var result = xmlToJson(xml);
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:ReferenceError:未定义DOMParser
编辑:这个链接对我不起作用,因为我的javascript不在HTML页面中,因为它是一个node.js文件. JavaScript DOMParser访问innerHTML和其他属性
Esa*_*ija 14
DOMParser
在node.js中没有,这是浏览器的事情.您可以尝试以下任何一个模块:
https://github.com/joyent/node/wiki/modules#wiki-parsers-xml
Nin*_*liu 14
NodeJS本身不提供许多浏览器功能,例如DOM操作或XHR,因为这不是访问DOM的典型服务器任务-您必须使用外部库来执行此操作。
DOM的能力在很大程度上取决于库,以下是您可以使用的主要工具的快速比较:
jsdom
:实现DOM级别4,这是最新的DOM标准,因此您可以在现代浏览器中执行的所有操作都可以在jsdom
:
const jsdom = require("jsdom");
const dom = new jsdom.JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
dom.window.document.querySelector("p").textContent; // 'Hello world'
Run Code Online (Sandbox Code Playgroud)htmlparser2
:相同,但以更复杂的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'
Run Code Online (Sandbox Code Playgroud)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>'
Run Code Online (Sandbox Code Playgroud)xmldom
:完全实现DOM级别2,部分实现DOM级别3。与HTML以及XML一起使用
dom-parser
:基于正则表达式的DOM解析器,可实现一些DOM方法,例如getElementById
。由于用正则表达式解析HTML是一个非常糟糕的主意,因此我不建议将其用于生产。
Chr*_*ley 12
您可以使用DOMParser的Node实现,例如xmldom.这将允许您在浏览器之外访问DOMParser.例如:
var DOMParser = require('xmldom').DOMParser;
var parser = new DOMParser();
var document = parser.parseFromString('Your XML String', 'text/xml');
Run Code Online (Sandbox Code Playgroud)
我之所以使用jsdom,是因为它有大量的用法,并且是由一位著名的网络英雄撰写的-不能保证它的行为与您的浏览器完全匹配(甚至每个浏览器的行为都相同),但是它对我有用:
const jsdom = require("jsdom")
const { JSDOM } = jsdom
global.DOMParser = new JSDOM().window.DOMParser
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢htmlparser2。这是一个非常棒、快速且轻量级的库。我创建了一个关于如何在 RunKit 上使用它的小演示:https://runkit.com/jfahrenkrug/htmlparser2-demo/1.0.0
归档时间: |
|
查看次数: |
39124 次 |
最近记录: |