Как вызвать xpath document () с разрешимыми базовыми ссылками - PullRequest
1 голос
/ 17 ноября 2010

У меня есть XML-файл, который содержит имя другого XML-файла:

в моей таблице стилей я определяю @href и открываю документ с помощью функции document ()

документ (@href)

должен вызвать мой URIResolver.resolve (fname, base) с основанием «Базовый URI узла, из которого вычисляется строка первого аргумента» *

документ (@href,.)

должен вызвать мой URIResolver.resolve (fname, base) с базой "Базового URI текущего узла"

Однако на практике с Xalan / J

документ (@href)

пусто

и

документ (@href,.)

указывает текущий каталог моего приложения

Как настроить базу так, чтобы мой URIResolver мог найти файл?

1 Ответ

1 голос
/ 17 ноября 2010

Обратите внимание, что это

document(@href)

Это равно этому

document(string(@href),@href)

, и поэтому, возможно, также

document(string(@href),.)

С http://www.w3.org/TR/xslt#document:

Когда функция документа имеет ровно один аргумент, а аргумент является набором узлов, то результатом является объединение для каждого узла в наборе узлов аргумента результата вызова функции документа спервый аргумент является строковым значением узла, а второй аргумент является набором узлов с узлом в качестве единственного члена.

А затем

БазаURI (см. [3.2 Базовый URI]) узла во втором наборе узлов аргумента, который находится первым в порядке документа, используется в качестве базового URI для преобразования относительного URI в абсолютный URI

Ноthis:

document(string(@href))

Будет использовать URI таблицы стилей в качестве распознавателя.Потому что:

Когда первый аргумент функции документа не является набором узлов, первый аргумент преобразуется в строку, как будто путем вызова строковой функции.Эта строка обрабатывается как ссылка на URI.

И затем

Если второй аргумент опущен, то по умолчанию используется узел в таблице стилей, содержащий выражение, котороевключает в себя вызов функции документа.

О вопросе

Как настроить базу так, чтобы мой URIResolver мог найти файл?

Ответ: используйте вторую форму и @ xml: base

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