khusamov
@khusamov
ReactJS, NodeJS, TypeScript, Sencha ExtJS

Почему DOMParser.evaluate не возвращает узлы, если в документе прописан xmlns?

Этот код возвращает нуль узлов.
Если убрать xmlns="www.w3.org/2000/svg", то все работает как надо.

const parser = new DOMParser();
const xmlSource = '<svg xmlns="http://www.w3.org/2000/svg"></svg>';
const svgDocument2 = parser.parseFromString(xmlSource, 'application/xml');

console.log(
	'count(//svg)',
	svgDocument.evaluate('count(//svg)', svgDocument2, null, XPathResult.NUMBER_TYPE).numberValue
);


namespaceResolver пробовал подставлять, но не помогает.
  • Вопрос задан
  • 30 просмотров
Решения вопроса 1
khusamov
@khusamov Автор вопроса
ReactJS, NodeJS, TypeScript, Sencha ExtJS
Оказывается надо в XPath надо обязательно использовать все пространства имен.
И конечно же namespaceResolver добавить.
svgDocument.evaluate('count(//svg:svg)', svgDocument2, namespaceResolver, XPathResult.NUMBER_TYPE).numberValue


namespaceResolver:

const namespaceMap = {
	svg: 'http://www.w3.org/2000/svg',
	xlink: 'http://www.w3.org/1999/xlink'
};

const namespaceResolver = prefix => namespaceMap[prefix || ''] || null;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы