具有多个名称空间和不同前缀的XSL元素

时间:2009-07-21 07:16:08

标签: xml xslt namespaces prefix

我想在我的XSL 1.0中使用一些命名空间创建一个元素就像这样:

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

出于某种原因,我无法使用XSL 2.0,扩展名为<xsl:namespace>,在XSL 1.0中只为每个元素声明了一个允许的命名空间,我该怎么办?

此致

2 个答案:

答案 0 :(得分:0)

适合我。

如果我制作文件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

答案 1 :(得分:0)

尝试使用W3C XSLT 2.0规范:Creating Namespace Nodes。它的要点是您可以在其他元素中创建元素以将这些命名空间放入范围。

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>