Элементы XSL, динамически наследующие пространство имен

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

Я пишу "xsl: element" в шаблонах, однако я не знаю, определены ли уже другие шаблоны, которые я не контролирую, пространство имен, прикрепленное к элементу-предку (т.е. xmlns = "blah").

В этом случае, если я не укажу пространство имен в элементе xsl:, я получу xmlns = "", возвращая этот элемент без пространства имен. Однако я не хочу, чтобы это происходило, но я не могу специально установить для пространства имен буквальное значение, а также не могу установить пространство имен по умолчанию для таблицы стилей.

Я видел множество сообщений, в которых пытались удалить xmlns = "", но я не считаю, что какие-либо решения подходят для этой ситуации. В основном это связано с настройкой пространств имен на всех узлах, настройкой значений по умолчанию или исключением префиксов результатов для #default.

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


person ljb26    schedule 26.05.2011    source источник
comment
Я пробовал использовать xpaths, такие как: 'namespace-uri (ancestor :: * [namespace-uri ()! =' '] [1])', но они, похоже, не получают мне значения, и даже если оно неужели я не могу установить его на свой элемент.   -  person ljb26    schedule 26.05.2011


Ответы (1)


Интересная проблема. Вам необходимо создать элемент, пространство имен которого совпадает с пространством имен его родительского элемента в результирующем дереве, о котором вы не знаете статически. Решение точно такое же, как если бы вы хотели создать элемент, локальное имя которого совпадает с именем его родительского элемента в результирующем дереве: как и следовало ожидать, URI и локальные части имени элемента имеют равный вес в XSLT. . (В языке мало сочувствия к людям, которые хотят рассматривать пространства имен как простое декоративное украшение.) В обоих случаях решение состоит в том, чтобы передать неизвестную информацию в качестве параметра в шаблон, который создает элемент.

person Michael Kay    schedule 26.05.2011
comment
Спасибо за это объяснение, оно было очень полезно. Я понимаю свои ограничения в этом сценарии, и метод параметров будет единственным жизнеспособным. - person ljb26; 27.05.2011