khusamov
@khusamov
ReactJS, NodeJS, TypeScript, Sencha ExtJS

Есть ли замена устаревшему jindw/xmldom?

Привет!

Пакет https://github.com/jindw/xmldom устарел конкретно.

Найти что-то более-менее новое пока не нашел.

Может кто уже пользуется более совершенной библиотеки для XML DOM?

В идеале хотелось бы:
1) чтобы пакет одинаково работал на сервере и в браузере
2) чтобы в нем экспортировались все классы, в том числе Element например
3) поддержка typescript
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 1
khusamov
@khusamov Автор вопроса
ReactJS, NodeJS, TypeScript, Sencha ExtJS
Пока нашел такой вариант из jsdom:

import {JSDOM} from 'jsdom';

declare module 'jsdom' {
	/**
	 * В пакете jsdom есть реализация XMLSerializer, но пока не описана в типах.
	 */
	export interface DOMWindow {
		XMLSerializer: {
			prototype: XMLSerializer;
			new(): XMLSerializer;
		};
	}
}

/**
 * Такой вариант извлечения нужных классов для работы с XML DOM подсказан на странице
 * https://stackoverflow.com/questions/11398419/trying-to-use-the-domparser-with-node-js
 */
const window = new JSDOM().window;

export const {Element, XPathResult, XMLSerializer} = window;
export const createDocument = window.document.implementation.createDocument.bind(window.document.implementation);

/**
 * Извлечение массива с найденными узлами из XPathResult, который возвращает метод ownerDocument.evaluate().
 * При условии, что последний аргумент evaluate был выставлен как XPathResult.*_SNAPSHOT_TYPE.
 * @link https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/snapshotItem
 */
export function getNodesFromXPathResult(result: XPathResult): Node[] {
	let nodes: Node[] = [], node: Node | null, i = 0;
	while (!!(node = result.snapshotItem(i++))) nodes.push(node);
	return nodes;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы