将元素名称更改为其属性之一 - XSLT / XML

时间:2014-10-07 09:58:46

标签: xml xslt

使用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>

2 个答案:

答案 0 :(得分:1)

您正在寻找<xsl:element>命令,在这种情况下,您可以像

一样使用
<xsl:element name="{@TYPE}">

这使用属性值模板,该模板允许在大括号内使用字符串表达式。

然后安排不复制TYPE属性。

答案 1 :(得分: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>