XSL-элементы динамически наследуют пространство имен - PullRequest
4 голосов
/ 26 мая 2011

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

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

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

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

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

1 Ответ

3 голосов
/ 27 мая 2011

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

...