2017-05-29 177 views
0

我想将对模式(2)进行验证的XML实例转换为针对旧模式(1)进行验证的实例。XSLT输出具有与输入相同的名称空间但名称空间前缀相同

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

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

+1

架构不定义任何前缀,他们定义目标名称空间。 –

+0

是的,的确如此。我正在假设可以分配一个工作前缀在XSLT中使用,并且期望它能识别实例中找到的** URI **,而不管实例使用什么作为前缀? – Michael

+0

我需要转换的实例将使用在模式中定义为方便的前缀,并且(1)和(2)对于2个不同的URI使用相同的前缀。 – Michael

回答

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"/> 
+0

这是我发布后2分钟的工作假设。一旦我完成了基于此的完成的XSLT,我将结束这个问题。 – Michael

相关问题