2012-05-10 36 views
0

重命名他們幾個我有一個XML,在XML我有它本身有幾個元素的元素,現在我想是每一個複製並改變標籤名。拷貝所有的XML節點,並使用XSLT 2

XML結構:

<mothertag> 
    <atag> 
     asdfasdfa 
    </atag> 

    <storybody> 
     <p>sometext here<URI ref="http://google.com" /> some more text</p> 
    </storybody> 

</mothertag> 
  1. 我想更改名稱<storybody><body>
  2. 一切應該是因爲它是和改變<URI><a>

我是什麼爲文檔的其餘部分定義模板並逐個應用。現在我遇到了這個需要複製的數據,因爲它只有很少的更改和名稱更改。

+0

看規則的明確聲明。 –

+0

[複製所有xml節點並使用XSLT重命名少數節點](http:// stackoverflow。com/questions/10533543/copy-all-xml-nodes-and-rename-few-in-them-using-xslt) –

+0

''屬性真的是'ref'還是實際上是'href'? – Borodin

回答

0

要在XSLT做到這一切你需要的是一個基本恆等變換,與該<storybody>元素異常。

事情是這樣的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

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

</xsl:stylesheet> 

編輯

我看了你的評論,「我不希望使用恆等變換而我需要使用身份轉換。在文檔「中的一個元素上,並且我不清楚你需要什麼。也許你對文檔的其餘部分有改變,但是對這個元素有困難?在這種情況下,除了你已經寫過的內容外,你應該只使用我答案中的第二個模板。

你的消息的第二部分是部分失去了標記,但現在已經被固定,我忽略了它。要將<URI>元素更改爲<a>以及您應該添加另一個模板。假設你想在原來的ref屬性更改爲href,兩人在一起看起來像這樣

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

<xsl:template match="storybody//URI"> 
    <a> 
    <xsl:attribute name="href"> 
     <xsl:value-of select="@ref" /> 
    </xsl:attribute> 
    </a> 
</xsl:template> 

如果你的目的是什麼與此不同,請澄清,我們會進一步幫助你的。

+0

其實我不想使用身份轉換。相反,我需要在文檔中的一個元素上使用標識轉換。 –

0

目前還不清楚是什麼你正在嘗試做Touseef沒有你想要的結果XML的一個例子,但....

如果你需要的是扔掉大部分的輸入文檔,並只保留一個標籤,然後這個模式可以幫助:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

    <xsl:template match="storybody"> 
     <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 

我不是在用XSLT引擎的機器前爲I型,所以我沒有測試過這一點。但想法是將所有內容與第一個模板進行匹配,並簡單地忽略它,除了我們只複製到輸出文檔的storybody元素。

如果這沒有再幫我勸你提供樣品期望的結果XML文檔和您希望在` `和`` 說明適用