2012-04-20 117 views
2

我正在研究一個讓我有點頭疼的XSLT,並且正在尋找一些提示。我正在轉換一個XML,其中一些標記具有名稱空間前綴,而另一些則不具有。我正在努力將所有標籤轉換爲一個通用名稱空間前綴。 XML的包含多個名稱空間的XSLT for XML包含多個名稱空間

例子:

<yes:Books> 
    <no:Book> 
     <Title>Yes</Title> 
     <maybe:Version>1</maybe:Version> 
    </no:Book> 
</yes:Books> 

我試圖讓:

<yes:Books> 
    <yes:Book> 
     <yes:Title>Yes</yes:Title> 
     <yes:Version>1</yes:Version> 
    </yes:Book> 
</yes:Books> 

的XML輸入幾個web服務,將要返回不同的命名空間的總和。我沒有任何問題適當地將它們聚合在一起,它創建了一個我遇到問題的公共前綴名稱空間。

最壞的情況下,我可以將它們排除在外,但我相信這不是推薦的。

謝謝。

回答

2

此轉換允許希望最終前綴和其命名空間被指定爲外部/全局參數。它顯示瞭如何用同樣的方式屬性名處理:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pPrefix" select="'yes'"/> 
<xsl:param name="pNamespace" select="'yes'"/> 

<xsl:template match="*"> 
    <xsl:element name="{$pPrefix}:{local-name()}" namespace="{$pNamespace}"> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:attribute name="{$pPrefix}:{local-name()}" namespace="{$pNamespace}"> 
    <xsl:value-of select="."/> 
    </xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

當應用在以下文件(提供一個有一個附加屬性,使問題更具挑戰性):

<yes:Books xmlns:yes="yes"> 
    <no:Book xmlns:no="no"> 
     <Title no:Major="true">Yes</Title> 
     <maybe:Version xmlns:maybe="maybe">1</maybe:Version> 
    </no:Book> 
</yes:Books> 

產生想要的,正確的結果:

<yes:Books xmlns:yes="yes"> 
    <yes:Book> 
     <yes:Title yes:Major="true">Yes</yes:Title> 
     <yes:Version>1</yes:Version> 
    </yes:Book> 
</yes:Books> 
+0

你太棒了!這工作沒有問題。 – Randmness 2012-04-20 05:13:20

+0

@ user1345501:不客氣。 – 2012-04-20 11:57:02

0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:custom="c"> 
    <xsl:template match="/"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="*"> 
     <xsl:element name="custom:{local-name()}" namespace-uri="c"> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

這種反式在一般情況下形成有問題。屬性被刪除。 – 2012-04-20 04:13:34

相關問題