2014-10-07 126 views
0

使用XSLT我想改變XML元素名稱到它的屬性的一個(元素將只包含一個屬性)和還要刪除屬性更改元素的名稱,它的屬性之一 - XSLT/XML

我有一個XML文檔,它看起來像這樣:

<EVENTS> 
    <EVENT TYPE="XXXXXX"> 
    <ID>1</ID> 
    <STATUS>COM</STATUS> 
    </EVENT> 
    <EVENT TYPE="XXXXXX"> 
    <ID>2</ID> 
    <STATUS>ACC</STATUS> 
    </EVENT> 
    <EVENT TYPE="YYYYYY"> 
    <ID>3</ID> 
    <STATUS>COM</STATUS> 
    </EVENT> 
    <EVENT TYPE="ZZZZZZ"> 
    <ID>4</ID> 
    <STATUS>COM</STATUS> 
    </EVENT> 
    <EVENT TYPE="XXXXXX"> 
    <ID>5</ID> 
    <STATUS>DEL</STATUS> 
    </EVENT> 
</EVENTS> 

我想將文件轉換成這個樣子的:

<EVENTS> 
    <XXXXXX> 
    <ID>1</ID> 
    <STATUS>COM</STATUS> 
    </XXXXXX> 
    <XXXXXX> 
    <ID>2</ID> 
    <STATUS>ACC</STATUS> 
    </XXXXXX> 
    <YYYYYY> 
    <ID>3</ID> 
    <STATUS>COM</STATUS> 
    </YYYYYY> 
    <ZZZZZZ> 
    <ID>4</ID> 
    <STATUS>COM</STATUS> 
    <ZZZZZZ> 
    <XXXXXX> 
    <ID>5</ID> 
    <STATUS>DEL</STATUS> 
    </XXXXXX> 
</EVENTS> 

回答

1

您正在尋找的<xsl:element>命令,在這種情況下,你會使用在

<xsl:element name="{@TYPE}"> 

這使用屬性值模板,它允許大括號內的字符串表達式。

然後安排不通過TYPE屬性複製。

0

非常好,謝謝你的幫助!爲了完整性,我使用了以下內容,並且它能夠工作....

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="EVENT"> 
     <xsl:element name="{@TYPE}"> 
      <xsl:copy-of select="*"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet>