XSLT输出具有不同的命名空间,但与输入

时间:2017-05-29 11:28:29

标签: xml xslt xml-namespaces

我想将一个针对schema(2)验证的XML实例转换为一个验证旧架构(1)的实例。

2个模式使用不同的名称空间URI,但为这些URI共享相同的元素名称前缀。

唯一的解决方法是在转换之前更改输入中使用的命名空间前缀吗?或者它可以内置到XSLT中吗?

1 个答案:

答案 0 :(得分:2)

  

唯一的解决方法是更改​​使用的命名空间前缀   变换前的输入?

不,解决方案是在样式表中为源XML名称空间使用不同的前缀。这是一个最小的例子:

<强> XML

<abc:root xmlns:abc="www.example.com/source"/>

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:src="www.example.com/source"
xmlns:abc="www.example.com/target"
exclude-result-prefixes="src"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="src:*">
    <xsl:element name="abc:{local-name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>  

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<abc:root xmlns:abc="www.example.com/target"/>