鑑於以下XML:變換產生的默認命名空間的xmlns公約= 「...」
<root xmlns="example.com">
<child />
</root>
什麼XSLT(1.0版),可用於生產:
<newRoot xmlns="stackoverflow.com">
<child />
</newroot>
我已經嘗試了排除結果前綴和名稱空間別名的各種組合。 E.g,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:e="example.com" xmlns:s="stackoverflow.com" exclude-result-prefixes="e">
<xsl:namespace-alias stylesheet-prefix="s" result-prefix="#default" />
<xsl:template match="e:root">
<s:newRoot>
<xsl:apply-templates />
</s:newRoot>
</xsl:template>
<xsl:template match="e:child">
<s:child />
</xsl:template>
</xsl:stylesheet>
我來最接近的是以下不正確的XML
<newRoot>
<child />
</newroot>
編輯:我對過於簡單的樣品道歉。 我正在尋找的解決方案將更改默認命名空間並對我的xml進行轉換。下面是我希望做什麼更復雜的例子:
<Data xmlns="sample.com/public">
<Insured>
<Name>Sample Client</Name>
<Locations>
<Location Number="1">
<Address>
<City>New York</City>
<State>New York</State>
<Street>222 10 Street</Street>
</Address>
</Location>
<Location Number="2">
<Address>
<City>New York</City>
<State>New York</State>
<Street>3538 27 Street</Street>
</Address>
</Location>
</Locations>
<Coverages>
<LocationSplit>
<LocationNumber>1</LocationNumber>
<Clause>
<Limit>10000000</Limit>
</Clause>
</LocationSplit>
</Coverages>
</Insured>
</Data>
<projection xmlns="sample.com/projected">
<insured>
<name>Sample Client</name>
<location address="222 10 Street New York, New York">
<clause>
<limit>10000000</limit>
</clause>
</location>
</insured>
</projection>
我認爲這將成爲排除對結果的前綴和命名空間別名是票,因爲我可以明確地使用每個命名空間通過在我的樣式表中聲明它們,然後刪除/ public命名空間,同時將/ projection命名空間別名到#default。但是,別名會導致只刪除名稱空間。
放置在樣式表中根節點的xmlns =「stackoverflow.com」並沒有前綴,宣佈新的節點,是實現我想要的方式。謝謝!我仍然喜歡關於爲什麼使用xsl:namespace-alias將前綴移動到默認命名空間導致命名空間url根本不被打印的解釋。 – eisenpony
我不明白你爲什麼要在這裏使用'xsl:namespace-alias';在任何情況下,如果您使用'result-prefix =「#default」',那麼您還必須定義一個默認名稱空間。否則,「真實」命名空間是無命名空間,並且這個*將會被打印爲「xmlns:s =」「'。 –
這是我誤會的癥結所在。我認爲命名空間別名正在改變前綴而不是命名空間。非常感謝。 – eisenpony