如何为样式表和结果创建不同的“xsd命名空间”?

时间:2013-05-29 11:57:58

标签: xslt namespaces rdf

是否可以将xsd名称空间转换为结果中不同的名称?

xsl:stylesheet元素的输入命名空间如下所示:

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

并且输出根元素的输出命名空间应如下所示:

xmlns:xsd="http://www.w3.org/2001/XMLSchema#"

我尝试手动将第二个命名空间分配给输出的根元素,然后XSLT转换不再识别前缀为“xsd”的元素,因为它似乎覆盖了原始命名空间。

更改前缀并创建别名也不是一个选项:在输出(RDF / XML)中,元素的前缀应称为“xsd”。

感谢您的帮助。

编辑:

这两个文件的相关部分是:

输入文件(XSD):

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

应该成为

输出文件(RDF / XML):

<rdf:RDF xmlns:xsd="http://www.w3.org/2001/XMLSchema#">

2 个答案:

答案 0 :(得分:1)

如果要将名称空间http://www.w3.org/2001/XMLSchema中的所有元素转换为名称空间http://www.w3.org/2001/XMLSchema#,请使用

<xsl:template match="xsd:*">
  <xsl:element name="{name()}" namespace="http://www.w3.org/2001/XMLSchema#">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

如果这没有用,那么请向我们展示您拥有的输入XML示例以及您要创建的相应输出示例。

答案 1 :(得分:0)

解答:

花了我几个小时,但最终我找到了自己的解决方案:

我首先必须从结果文件中排除样式表的前缀:

<xsl:stylesheet version="2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xsd">

然后我为输出的根元素创建了一个新的XSD名称空间:

<xsl:namespace name="xsd" select="'http://www.w3.org/2001/XMLSchema#'"/>

无论如何,谢谢你的帮助。