Я использую Xerces 2.9.1 для выполнения парсинга XML. XML содержит пространство имен, и я настроил Xerces так, чтобы он учитывал пространство имен.
У меня определены два префикса: rec и com. rec определяется в корневом теге, а com объявляется в каждом узле, который его использует.
<rec:root xmlns:rec="...">
<rec:dummy ...>
<com:item xmlns:com="..." />
...
Я получаю исключение при разборе следующего выражения XPath:
/rec:root/rec:dummy/com:item
XPathStylesheetDOM3Exception: префикс должен разрешаться в пространство имен: com
Я нашел это в блоге, там говорится о Xalan, но я заметил, что у Xerces такое же поведение.
Что ж, вы можете утверждать, что это недостаток дизайна, поскольку он использует только сопоставление, найденное в переданном ему узле, то есть в объявлениях пространства имен верхнего уровня в нашем случае. Итак, давайте переместим объявление пространства имен на верхний уровень, чтобы получить следующий ввод XML
Перемещение xmlns:com в корневой тег устраняет проблему, но я не могу контролировать этот файл.