Выражение XPath хорошо работает в оценщике, но не в браузере - PullRequest
1 голос
/ 27 июня 2019

Я не могу заставить работать оценщик XPath браузера, что очень расстраивает.Я почти уверен, что это проблема пространства имен, но я не уверен, что делаю неправильно.

У меня есть XML-документ .Я хочу выполнить запрос XPath, даже простой - //teiHeader.Это правильный запрос, возвращающий все элементы с тегом teiHeader.Документ содержит один такой элемент.

После анализа XML-документа я пытаюсь оценить выражение XPath следующим образом:

const resolver = doc.createNSResolver(doc.documentElement);
const xpathResult = doc.evaluate(xpath, doc, resolver);

let node = xpathResult.iterateNext();
while(node) {
    console.log(node);
    node = xpathResult.iterateNext();
}

В результате отсутствуют узлы, первый вызов iterateNext возвращает ноль.

Вы можете посмотреть на эту скрипку , которая демонстрирует проблему.Вы увидите, что оценка XPath не вернула никаких элементов, но простой getElementsByTagName завершился успешно.И Chrome, и Firefox ведут себя одинаково.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 28 июня 2019

Документ TEI, который вы используете в качестве исходного XML, содержит только пространство имен по умолчанию без префикса.Но в XPath 1.0 вы должны указать префикс для каждого пространства имен, которое вы хотите использовать.Вместо этого XPath //teiHeader будет выбирать только элементы <teiHeader> без пространства имен.

Если вы хотите получить элемент teiHeader с помощью Document.evaluate(), вы можете использовать вместо этого XPath:

const xpath = "//*[local-name() = 'teiHeader']"

Скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...