我想使用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>
输出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>
错误为prefix: Missing context item
。有谁想过如何实现这个?