У меня есть это. xml:
[...]<person xml:id="pe_054">
<persName>
<forename>Robert</forename>
<surname>Thomas</surname>
</persName>
</person>[etc]
У меня есть это JavaScript:
[...]function resolver() {
return 'http://www.tei-c.org/ns/1.0';
}
Connect.open("GET", "data/persons_places.xml", false);
Connect.setRequestHeader("Content-Type", "text/xml");
Connect.send(null);
var xmldoc = Connect.responseXML;
const surname = xmldoc.evaluate('//tei:person/tei:persName/tei:surname', xmldoc, resolver, XPathResult.STRING_TYPE, null)[...]
, которое работает, как и ожидалось, то есть возвращает текстовое содержимое первого Фамильный узел. Однако мне нужно получить указанную фамилию c через атрибут @ xml: id. Поэтому, если я изменяю XPath на это:
const surname = xmldoc.evaluate('//tei:person[@xml:id='pe_001']/tei:persName/tei:surname', xmldoc, resolver, XPathResult.STRING_TYPE, null)
, код возвращает пустую строку. В console.log я получаю:
XPathResult { resultType: 2, stringValue: "", invalidIteratorState: false }
stringValue
действительно заполняется, если я не фильтрую по @ xml: id. Я в недоумении: я пытался заставить его работать, экранируя @, скобки, равно, ничего. Кто-нибудь может мне помочь, пожалуйста?