Xml 使用XSLT生成XSLT,名称空间前缀

Xml 使用XSLT生成XSLT,名称空间前缀,xml,xslt,Xml,Xslt,我想使用XSLT将一个XML转换成另一个XSLT。在输出XSLT中,名称空间前缀和uri应由XML文档决定。例如,XML文档是 <namespaces> <namespace> <prefix>abc</prefix> <uri>my.domain.abc</uri> </namespace> <namespace> <prefi

我想使用XSLT将一个XML转换成另一个XSLT。在输出XSLT中,名称空间前缀和uri应由XML文档决定。例如,XML文档是

<namespaces>
    <namespace>
       <prefix>abc</prefix>
       <uri>my.domain.abc</uri>
    </namespace>
    <namespace>
       <prefix>def</prefix>
       <uri>my.domain.def</uri>
    </namespace>
</namespaces>

abc
我的域名
def
my.domain.def
输出XSLT应该类似于:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
    xmlns:abc="my.domain.abc"
    xmlns:def="my.domain.def"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/"/>
</xsl:stylesheet>

我试过这种方法,但没有成功:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">
    <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>

    <xsl:template match="/">
      <axsl:stylesheet 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
            version="2.0">
        <xsl:for-each select="/namespaces/namespace">
          <xsl:namespace name="{prefix}" select="uri"/>
        </xsl:for-each>    
      </axsl:stylesheet>
    </xsl:template>
</xsl:stylesheet>


错误为
前缀:缺少上下文项
。有没有想过如何做到这一点

在修复了示例对我有效之后,XSLT片段在
xsl:stylesheet
上缺少
version
属性。您得到的错误听起来好像您没有提供输入文档,或者没有使用原子值或在未定义上下文项的函数中使用某些代码。那么,一个最小但完整的示例如何让我们重现问题?您使用哪个XSLT处理器?@MathiasMüller这是实际的消息。请注意,“prefix”是我的xslt@mattsun中的前缀,您使用哪个xslt处理器来给出错误消息?@mattsun您是对的,当然,我没有仔细阅读。我删除了我的胡说八道。您是显示了您正在使用的整个样式表,还是在发布到这里之前对其进行了简化?在修复示例对我有效后,XSLT代码段在
xsl:stylesheet
上缺少
version
属性。您得到的错误听起来好像您没有提供输入文档,或者没有使用原子值或在未定义上下文项的函数中使用某些代码。那么,一个最小但完整的示例如何让我们重现问题?您使用哪个XSLT处理器?@MathiasMüller这是实际的消息。请注意,“prefix”是我的xslt@mattsun中的前缀,您使用哪个xslt处理器来给出错误消息?@mattsun您是对的,当然,我没有仔细阅读。我删除了我的胡说八道。你是展示了你正在使用的整个样式表,还是在这里发布之前简化了它?