Элемент XSL с несколькими пространствами имен с другим префиксом - PullRequest
0 голосов
/ 21 июля 2009

Я хочу создать элемент в моем XSL 1.0 с некоторым пространством имен, например:

<element xmlns:a = '...' xmlns:b = '...' xmlns = '...' >

По какой-то причине я не могу использовать XSL 2.0, с расширением <xsl:namespace>, для каждого элемента в XSL 1.0 объявлено только одно разрешенное пространство имен, как мне поступить?

С уважением,

Ответы [ 2 ]

0 голосов
/ 21 июля 2009

Попробуйте W3C XSLT 2.0 Spec: Создание узлов пространства имен . Суть в том, что вы можете создавать элементы внутри других элементов, чтобы поместить эти пространства имен в область видимости.

Example:

<!--XSLT 2.0-->
<data xsi:type="xs:integer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xsl:namespace name="xs" select="'http://www.w3.org/2001/XMLSchema'"/>
  <xsl:text>42</xsl:text>
</data>

<!--XSLT 1.0-->
<data xsi:type="xs:integer"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  42
</data>
0 голосов
/ 21 июля 2009

У меня работает.

Если я сделаю файл test.xsl:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <root>
        <multins xmlns:abc="http://example.com/1" xmlns:def="http://example.com/2" />
    </root>
</xsl:template>

</xsl:stylesheet>

А потом запусти

xsltproc test.xsl test.xsl
<?xml version="1.0"?>
<root><multins xmlns:abc="http://example.com/1" xmlns:def="http://example.com/2"/></root>

с этой информацией о версии:

$ xsltproc --version
Using libxml 20703, libxslt 10124 and libexslt 813
xsltproc was compiled against libxml 20632, libxslt 10124 and libexslt 813
libxslt 10124 was compiled against libxml 20632
libexslt 813 was compiled against libxml 20632
...