1. ホーム
  2. javascript

[解決済み] DOMParserをnode jsで使ってみる

2022-11-24 20:37:32

質問

私のjsコードでDOMParserを使用しようとすると、問題が発生します。 私のコードでは、xmlhttp.responseTextソープレスポンスによってxmlファイルを取得します。 私は JSON フォーマットでその要素にアクセスできるようにしたいので、私のコードは次のようになります。

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

このようなエラーメッセージが表示されます。 ReferenceError: DOMParserは定義されていません。

編集してください。 私のjavascriptはnode.jsファイルであるため、HTMLページにないため、このリンクは私のために動作しませんでした。 JavaScript DOMParserのinnerHTMLとその他のプロパティへのアクセス

どのように解決するのですか?

DOM操作やXHRのような多くのブラウザの機能は、DOMにアクセスするための典型的なサーバータスクではないため、NodeJSネイティブでは利用できません。

DOMの容量はライブラリに大きく依存します。ここでは、あなたが使用できる主なツールの簡単な比較をしています。

  • jsdom : DOM レベル 4 を実装しており、これは であり、最新の DOM 標準です。 であるため、最新のブラウザでできることはすべて jsdom . これは、Node でブラウザを使用するための事実上の業界標準であり、Mocha、Vue Test Utils、Webpack Prerender SPA Plugin、および他の多くで使用されています。

    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 Node の代わりに Deno を使用することがオプションである場合、このライブラリは 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 level 2 を完全に実装し、DOM level 3 を部分的に実装しています。HTMLで動作し、XMLでも動作します。

  • dom-parser のようないくつかの DOM メソッドを実装した、正規表現に基づく DOM パーサーです。 getElementById . 正規表現で HTML を解析するのは は非常に悪い考えです。 なので、制作にはお勧めしません。