Есть ли подход, который собирает префикс: local-name элемента с помощью URN и локального имени?Как извлечь префикс из URI?
Например, используя этот код:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0" version="1.0">
<xsl:template match="/">
<root>
<xsl:element name="element" namespace="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<nested-element>Some text...</nested-element>
</xsl:element>
</root>
</xsl:template>
</xsl:stylesheet>
Что я получаю в результате это:
<root xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<element xmlns="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<nested-element xmlns="">Some text...</nested-element>
</element>
</root>
То, что я хочу, как результат:
<root xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xstible:1.0">
<fo:element>
<nested-element>Some text...</nested-element>
</fo:element>
</root>
Предоставление URI для элемент xsl: имя, которое должно быть магически префиксным (с префиксом, соответствующим этому URI - объявленному в корневом элементе ement), а URI отсутствует в результирующем документе. Надеюсь, вы понимаете, чего я пытаюсь достичь :)
В вашем желаемом результате элемент 'inested-element' находится в no-namespace. Вы уверены, что это то, что вы хотите? –
Да. Я использую литерал для моего корневого элемента, чтобы он мог хранить все объявления пространства имен. – Hairi
ОК. Я не думаю, что вы можете сказать, что ваш XSLT-процессор автоматически добавляет префикс так, как вы описываете. Возможно, вы могли бы сделать это за два прохода и обработать незакрепленные элементы на втором проходе. В любом случае результаты семантически идентичны, поэтому нет веских оснований тратить на это какие-либо усилия. –