2013-10-24 2 views
0

Есть ли способ исправить uri обрабатываемого документа (который может быть или не быть загружен вызовом функции document()) и предпочтительно номер строки ?Вывести текущее имя документа и номер строки из XSL/XPath

В принципе у меня есть ситуация в моем XSL, где потенциально может быть ошибка поэтому я использую

<xsl:message terminate="yes">...</xsl:message> 

Было бы хорошо, если сообщение может включать в себя место ошибки в исходном XML-документе.

В настоящее время я использую встроенный движок .NET XSL, хотя мне, возможно, придется перейти на использование saxon для другой проблемы.

ответ

0

С процессором XSLT 2.0 вы можете использовать base-uri(.) для URI. Saxon имеет расширение http://www.saxonica.com/documentation/index.html#!functions/saxon/line-number для номера строки.

С XSLT 1.0 Я думаю, что для доступа к входному URI вам необходимо определить параметр и передать значение из вашего приложения.

0

В спецификации XSLT 1.0 нет ничего очень полезного.

В спецификации 2.0 есть base-uri() и document-uri(). Они означают несколько разные вещи: document-uri - это URI, который можно использовать для загрузки документа с помощью doc() (который может быть не связан с фактическим расположением документа из-за URIResolvers и EntityResolvers), тогда как базовый uri () применяется к каждому узлу элемента и является URI, используемым для разрешения относительных ссылок URI (которые могут отличаться от местоположения документа из-за xml: базовых атрибутов и внешних границ сущностей).

Saxon предоставляет саксон: system-id(), который должен быть URI фактического файла, из которого был загружен определенный элемент, и saxon: строка-номер(), которая является номером строки этого элемента в этом исходный файл. Это зависит от сохранения информации о номере линии при создании документа: опция -l в командной строке. Я не думаю, что в процессоре Microsoft есть что-то подобное.

Смежные вопросы