如何从具有父节点和子节点的结构的 XML 文件转到只有一层的结构

How to go from XML file with a stucture having a parent node and a child node to a structure with only one level

使用 ssis 'XML task',是否有一个 XSL 可以从具有父节点和子节点的 xml 文件转到只有一个级别的 xml 文件:输入 xml 中子节点的出现次数与输出 xml 中的出现次数相同。举个例子

输入xml

<?xml version="1.0" encoding="utf-8"?>
<RL>
  <RL0601a>BEAUDRY</RL0601a>
  <r>
    <RL0104B>61</RL0104B>
    <RL0104C>2095</RL0104C>
  </r>
  <r>
    <RL0104B>64</RL0104B>
    <RL0104C>1090</RL0104C>
  </r>
</RL>

输出xml

<?xml version="1.0" encoding="utf-8"?>
<RL>
<r>
    <RL0601a>BEAUDRY</RL0601a>
    <RL0104B>61</RL0104B>
    <RL0104C>2095</RL0104C>
</r>
<r>
    <RL0601a>BEAUDRY</RL0601a> 
    <RL0104B>64</RL0104B>
    <RL0104C>1090</RL0104C>
</r>
</RL>

输入XML

<?xml version="1.0" encoding="utf-8"?>
<RL>
    <RL0601a>BEAUDRY</RL0601a>
    <r>
        <RL0104B>61</RL0104B>
        <RL0104C>2095</RL0104C>
    </r>
    <r>
        <RL0104B>64</RL0104B>
        <RL0104C>1090</RL0104C>
    </r>
</RL>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/RL">
        <root>
            <xsl:for-each select="r">
                <xsl:copy>
                    <xsl:copy-of select="../RL0601a"/>
                    <xsl:copy-of select="*"/>
                </xsl:copy>
            </xsl:for-each>
        </root>
    </xsl:template>
</xsl:stylesheet>

输出XML

<?xml version='1.0' encoding='utf-8' ?>
<root>
  <r>
    <RL0601a>BEAUDRY</RL0601a>
    <RL0104B>61</RL0104B>
    <RL0104C>2095</RL0104C>
  </r>
  <r>
    <RL0601a>BEAUDRY</RL0601a>
    <RL0104B>64</RL0104B>
    <RL0104C>1090</RL0104C>
  </r>
</root>