Trying to use the DOMParser with node js

前端 未结 7 1398
忘了有多久
忘了有多久 2020-12-01 10:17

I am running into issues when trying to use the DOMParser in my js code. In my code, I retrieve an xml file via xmlhttp.responseText soap response. I want to be able to ac

相关标签:
7条回答
  • 2020-12-01 10:32

    Not a direct answer, but depending on your application you could use JSX parser (used by React.js) https://github.com/RReverser/acorn-jsx

    0 讨论(0)
  • 2020-12-01 10:35

    I used jsdom because it's got a ton of usage and is written by a prominent web hero - no promises that it's behavior perfectly matches your browser (or even that every browser's behavior is the same) but it worked for me:

    const jsdom = require("jsdom")
    const { JSDOM } = jsdom
    global.DOMParser = new JSDOM().window.DOMParser
    
    0 讨论(0)
  • 2020-12-01 10:36

    You can use a Node implementation of DOMParser, such as xmldom. This will allow you to access DOMParser outside of the browser. For example:

    var DOMParser = require('xmldom').DOMParser;
    var parser = new DOMParser();
    var document = parser.parseFromString('Your XML String', 'text/xml');
    
    0 讨论(0)
  • 2020-12-01 10:40
    var DOMParser = require('xmldom').DOMParser;
    var doc = new DOMParser().parseFromString(
        '<xml xmlns="a" xmlns:c="./lite">\n'+
            '\t<child>test</child>\n'+
            '\t<child></child>\n'+
            '\t<child/>\n'+
        '</xml>'
        ,'text/xml');
    
    0 讨论(0)
  • 2020-12-01 10:48

    A lot of browser functionalities, like DOM manipulations or XHR, are not available natively NodeJS because that is not a typical server task to access the DOM - you'll have to use an external library to do that.

    DOM capacities depends a lot on the library, here's a quick comparisons of the main tools you can use:

    • jsdom: implements DOM level 4 which is the latest DOM standard, so everything that you can do on a modern browser, you can do it in jsdom. It is the de-facto industry standard for doing browser stuff on Node, used by Mocha, Vue Test Utils, Webpack Prerender SPA Plugin, and many other:

      const jsdom = require("jsdom");
      const dom = new jsdom.JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
      dom.window.document.querySelector("p").textContent; // 'Hello world'
      
    • htmlparser2: same, but with enhanced performances and flexibility at the price of a more complex 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: implementation of jQuery based on HTML DOM parsing by 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: fully implements the DOM level 2 and partially implements the DOM level 3. Works with HTML, and with XML also

    • dom-parser: regex-based DOM parser that implements a few DOM methods like getElementById. Since parsing HTML with regular expressions is a very bad idea I wouldn't recommend this one for production.

    0 讨论(0)
  • 2020-12-01 10:58

    There is no DOMParser in node.js, that's a browser thing. You can try any of these modules though:

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

    0 讨论(0)
提交回复
热议问题