Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用XSLT将XML元素名称转换为属性值?_Xml_Xslt_Xpath - Fatal编程技术网

如何使用XSLT将XML元素名称转换为属性值?

如何使用XSLT将XML元素名称转换为属性值?,xml,xslt,xpath,Xml,Xslt,Xpath,给定XML片段: <transactions> <tran id="1"> <E8> <datestamp>2012-05-17T15:16:57Z</datestamp> </E8> </tran> </transactions> 2012-05-17T15:16:57Z 如何使用XSLT将元素转换为 编辑:预期输出: <transactions>

给定XML片段:

<transactions>
  <tran id="1">
    <E8>
      <datestamp>2012-05-17T15:16:57Z</datestamp>
    </E8>
  </tran>
</transactions>

2012-05-17T15:16:57Z
如何使用XSLT将元素
转换为

编辑:预期输出:

<transactions>
  <tran id="1">
    <event type="E8">
      <datestamp>2012-05-17T15:16:57Z</datestamp>
    </event>
  </tran>
</transactions>

2012-05-17T15:16:57Z
使用:


输出:

<transactions>
  <tran id="1">
    <event type="E8">2012-05-17T15:16:57Z</event>
  </tran>
</transactions>

2012-05-17T15:16:57Z

此转换:

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

 <xsl:template match="tran/E8">
  <event type="E8">
   <xsl:apply-templates/>
  </event>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<transactions>
  <tran id="1">
    <E8>
      <datestamp>2012-05-17T15:16:57Z</datestamp>
    </E8>
  </tran>
</transactions>
<transactions>
   <tran id="1">
      <event type="E8">
         <datestamp>2012-05-17T15:16:57Z</datestamp>
      </event>
   </tran>
</transactions>

2012-05-17T15:16:57Z
生成所需的正确结果:

<transactions>
  <tran id="1">
    <E8>
      <datestamp>2012-05-17T15:16:57Z</datestamp>
    </E8>
  </tran>
</transactions>
<transactions>
   <tran id="1">
      <event type="E8">
         <datestamp>2012-05-17T15:16:57Z</datestamp>
      </event>
   </tran>
</transactions>

2012-05-17T15:16:57Z

谢谢,这回答了我的问题,但这并不是我所期望的结果(请参见编辑)。我仍然需要保留E8元素的所有子元素(可以有多个)。对不起,我没说清楚,我知道了。使用
而不是
@JordanDedels,实际上,使用
xsl:copy of
并不是最好的解决方案——如果将来需要转换这些子级,则必须删除此指令。@DimitreNovatchev,这是一个很好的观点。我是XLST的新手,所以谢谢你的提醒。我将使用您的答案中所示的