Сохранить XML, проанализированный JSDOM как файл - PullRequest
0 голосов
/ 09 января 2020

Я могу разобрать XML вот так:

import JSDOM from "jsdom";
const myXml = "... some xml loaded from somewhere ...";
const dom = new JSDOM.JSDOM(myXml);

Я был очень удивлен, когда погуглил "jsdom save xml" и ничего не получил. Я думал, что JSDOm - одна из самых популярных библиотек для манипулирования XML.

В одном ответе я видел это:

window.document.documentElement.outerHTML

. Например, он преобразует:

<Node>
   <Child attr="attr"/>
   <Child attr="attr"/>
   <Child attr="attr"/>
   <Child attr="attr"/>
</Node>

в

<Node>
   <Child attr="attr">
   <Child attr="attr">
   <Child attr="attr">
   <Child attr="attr">
   </Child></Child></Child></Child>
</Node>

Также документ начинается с:

<html><head></head><body><globe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Обратите внимание, что Globe является элементом root источника XML. Он также производит все в нижнем регистре.

1 Ответ

0 голосов
/ 09 января 2020

Метод сохранения документа был верным. Но метод разбора неверен. JSDOM требует HTML и создает экземпляр DOM браузера. И он должен использоваться как таковой, поэтому шаги такие же, как при разборе XML в браузере:

// Create empty DOM, the imput param here is for HTML not XML, and we don want to parse HTML
const dom = new JSDOM.JSDOM("");
// Get DOMParser, same API as in browser
const DOMParser = dom.window.DOMParser;
const parser = new DOMParser;
// Create document by parsing XML
const document = parser.parseFromString(xml, "text/xml");

// save the xml after modifications 
const xmlString = document.documentElement.outerHTML;
...