2017-05-29 176 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

相關問題