2008-09-27 46 views

回答

13

隨着foo.xml

<foo x="1"> 
    <bar y="2"> 
     <baz z="3"/> 
    </bar> 
    <a-special-element n="8"/> 
</foo> 

和foo.xsl

<xsl:template match="*"> 
     <xsl:element name="{local-name()}" namespace="A" > 
      <xsl:copy-of select="attribute::*"/> 
      <xsl:apply-templates /> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="a-special-element"> 
     <B:a-special-element xmlns:B="B"> 
      <xsl:apply-templates match="children()"/> 
     </B:a-special-element> 
    </xsl:template> 

</xsl:transform> 

我得到

<foo xmlns="A" x="1"> 
    <bar y="2"> 
     <baz z="3"/> 
    </bar> 
    <B:a-special-element xmlns:B="B"/> 
</foo> 

這就是你想要的?

+0

我在你的帖子之前搜索了一個答案,它基本上是一樣的。唯一的區別是我使用的是,但我相信它們在功能上是完全相同的。 – 2008-09-28 00:01:09

0

這是我到目前爲止有:

<xsl:template match="*"> 
    <xsl:element name="{local-name()}" namespace="A" > 
     <xsl:apply-templates /> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="a-special-element"> 
    <B:a-special-element xmlns:B="B"> 
     <xsl:apply-templates /> 
    </B:a-special-element> 
</xsl:template> 

這幾乎工程;問題是它沒有複製屬性。從我讀過的文章來看,xsl:元素沒有辦法從元素中原樣複製所有的屬性(use-attribute-sets似乎並沒有削減它)。

+1

您還沒有閱讀正確的文檔。使用武力,閱讀規範,這是非常好的寫作和訪問。 Yup; – ddaa 2008-09-27 23:39:23

2

您將需要兩個主要成分配方。

醬料將是identity transform,主要味道將由namespace屬性給出xsl:element

以下未經測試的代碼應該將http://example.com/名稱空間添加到所有元素。

<xsl:template match="*"> 
    <xsl:element name="xmpl:{local-name()}" namespace="http://example.com/"> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

個人消息:你好,珍妮Tennison。我知道你正在讀這個。

相關問題