我有一个以下结构的文档(这只是一个帮助我表达问题的示例),我正在尝试将其展平。<Report_Entry>通过展平,我的意思是用几个s复制所有节点,<Event>以便每个<Report_Entry>节点只包含一个<Event>
我有的:
<?xml version="1.0"?>
<Report_Data>
  <Report_Entry>
    <ID>1</ID>
    <Event>
      <Start_Date>2011-09-06</Start_Date>
      <End_Date>2011-09-10</End_Date>
    </Event>
    <Event>
      <Start_Date>2011-09-10</Start_Date>
      <End_Date>2011-09-15</End_Date>
    </Event>
    <Event>
      <Start_Date>2011-09-15</Start_Date>
      <End_Date>2011-09-20</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>2</ID>
    <Event>
      <Start_Date>2011-09-20</Start_Date>
      <End_Date>2011-09-25</End_Date>
    </Event>
    <Event>
      <Start_Date>2011-09-25</Start_Date>
      <End_Date>2011-09-30</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>3</ID>
    <Event>
      <Start_Date>2011-09-30</Start_Date>
      <End_Date>2011-10-05</End_Date>
    </Event>
  </Report_Entry>
</Report_Data>
我想要得到什么:
<?xml version="1.0"?>
<Report_Data>
  <Report_Entry>
    <ID>1</ID>
    <Event>
      <Start_Date>2011-09-06</Start_Date>
      <End_Date>2011-09-10</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>1</ID>
    <Event>
      <Start_Date>2011-09-10</Start_Date>
      <End_Date>2011-09-15</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>1</ID>
    <Event>
      <Start_Date>2011-09-15</Start_Date>
      <End_Date>2011-09-20</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>2</ID>
    <Event>
      <Start_Date>2011-09-20</Start_Date>
      <End_Date>2011-09-25</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>2</ID>
    <Event>
      <Start_Date>2011-09-25</Start_Date>
      <End_Date>2011-09-30</End_Date>
    </Event>
  </Report_Entry>
  <Report_Entry>
    <ID>3</ID>
    <Event>
      <Start_Date>2011-09-30</Start_Date>
      <End_Date>2011-10-05</End_Date>
    </Event>
  </Report_Entry>
</Report_Data>
这是我正在使用的 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<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="Report_Entry">
  <xsl:for-each select="Event">
    <Report_Entry>
      <xsl:copy-of select="../*[not(self::Event)]"/>
      <xsl:copy-of select="."/>
    </Report_Entry>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
它有效,尽管我觉得可能有更好、更快和更通用的解决方案。特别是,我不喜欢“硬编码” <Report_Entry>,因为这样我就无法复制它的属性(如果有的话)。有没有其他方法/模板来处理这个问题?