我使用微軟的XSLT處理器(1.0只)多個命名空間1.0
XML開場白:
<?xml version="1.0" encoding="utf-8"?>
<Header xmlns="http:\\OldNameSpace.com">
<Detail>
有以下XSLT模板拿起我的文檔的<Header>
元素並更改其名稱空間。
<xsl:template match="*">
<xsl:element name="{name()}" xmlns="http:\\NewNameSpace.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
果然<Header xmlns="http:\\OldNameSpace.com">
進入<Header xmlns="http:\\NewNameSpace.com">
不過,我現在需要第二個命名空間添加到這個讓我得到以下輸出:
<Header xmlns="NewNameSpace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
我已經嘗試使用:
<xsl:template match="*">
<xsl:element name="{name()}" xmlns="NewNameSpace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:copy-of select="@*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
但是我仍然只得到相同的輸出t作爲原始的XSLT模板。
任何人都可以啓發我,爲什麼這是?
Dimitre你永遠不會失望,謝謝。 – Mike 2012-04-11 12:28:51
@Mike:不客氣。你的問題很容易解決,因爲要添加的命名空間是靜態的。當命名空間要動態生成時,它變得更有趣(在XSLT 1.0中)。大衛卡萊爾和邁克爾凱在這個更具挑戰性的案例中暗示瞭解決方案。最近我使用這種特殊的XSLT 1.0技術給出了答案 - 它還需要使用'xxx:node-set()'擴展函數。 – 2012-04-11 12:33:56
@Mike:更具挑戰性的問題的解決方案:http://stackoverflow.com/a/9937128/36305 – 2012-04-11 12:40:02