我想将一个针对schema(2)验证的XML实例转换为一个验证旧架构(1)的实例。
2个模式使用不同的名称空间URI,但为这些URI共享相同的元素名称前缀。
唯一的解决方法是在转换之前更改输入中使用的命名空间前缀吗?或者它可以内置到XSLT中吗?
答案 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"/>