我有一段带有以下节点的XML
<C1478N> xml here </C1478N>
如何添加名称空间前缀和URL以使XML成为
<en:C1478N xmlns:en="http://test.host.com/C1478N"></en:C1478N>
我尝试了以下XSLT,但它无法正常工作
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:ie="http://test.host.com/C1478N"
exclude-result-prefixes="fn xs xsi xsl">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="/" mode="move-to-namespace">
<xsl:with-param name="namespace" select="'http://test.host.com/C1478N'"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*" mode="move-to-namespace">
<xsl:param name="namespace"/>
<xsl:element name="en:{local-name()}" namespace="{$namespace}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
任何人都知道这是什么问题吗?
由于
答案 0 :(得分:0)
您的转换不适用于XSLT 1.0处理器。
你为什么不这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="en:{local-name()}" namespace="http://test.host.com/C1478N">
<xsl:copy-of select="@*" />
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>