Xml XSLT使用内部结构的单个实例创建源消息的副本

Xml XSLT使用内部结构的单个实例创建源消息的副本,xml,xslt,Xml,Xslt,我想找到一个通用的xslt转换来解决这个问题。 假设有这个XML <Train> <GeneralData> <TrainNumber>123</TrainNumber> </GeneralData> <ArrayOfCoaches> <Coach> <CoachNumber>1</CoachNumber>

我想找到一个通用的xslt转换来解决这个问题。 假设有这个XML

<Train>
    <GeneralData>
        <TrainNumber>123</TrainNumber>
    </GeneralData>
    <ArrayOfCoaches>
        <Coach>
            <CoachNumber>1</CoachNumber>
            <CoachSeats>18</CoachSeats>
        </Coach>
        <Coach>
            <CoachNumber>2</CoachNumber>
            <CoachSeats>23</CoachSeats>
        </Coach>
        <Coach>
            <CoachNumber>3</CoachNumber>
            <CoachSeats>34</CoachSeats>
        </Coach>
    </ArrayOfCoaches>
</Train>

123
1.
18
2.
23
3.
34
我希望能够“分割”这个消息,创建几个只包含一个Coach的部分

<ArrayOfTrainCoaches>
    <Train>
        <GeneralData>
            <TrainNumber>123</TrainNumber>
        </GeneralData>
        <ArrayOfCoaches>
            <Coach>
                <CoachNumber>1</CoachNumber>
                <CoachSeats>18</CoachSeats>
            </Coach>
        </ArrayOfCoaches>
    </Train>
    <Train>
        <GeneralData>
            <TrainNumber>123</TrainNumber>
        </GeneralData>
        <ArrayOfCoaches>
            <Coach>
                <CoachNumber>2</CoachNumber>
                <CoachSeats>23</CoachSeats>
            </Coach>
        </ArrayOfCoaches>
    </Train>
    <Train>
        <GeneralData>
            <TrainNumber>123</TrainNumber>
        </GeneralData>
        <ArrayOfCoaches>
            <Coach>
                <CoachNumber>3</CoachNumber>
                <CoachSeats>34</CoachSeats>
            </Coach>
        </ArrayOfCoaches>
    </Train>
</ArrayOfTrainCoaches>

123
1.
18
123
2.
23
123
3.
34
我不清楚如何使用每个子结构来复制整个消息,除了一些子结构,我想将它们拆分为整个消息的专用副本

谢谢您的帮助。

看起来像:

<ArrayOfTrainCoaches>
  <xsl:for-each select="//Coach">
    <Train>
        <xsl:copy-of select="//GeneralData"/>
        <ArrayOfCoaches>
            <xsl:copy-of select="."/>
        </ArrayOfCoaches>
    </Train>
  </xsl:for-each>
</ArrayOfTrainCoaches>


非常感谢您的支持!我也非常感谢你!我也会试试你的建议!
<xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Train">
        <ArrayOfTrainCoaches>
        <xsl:for-each select="ArrayOfCoaches/Coach">

            <Train>
                <xsl:copy-of select="ancestor::Train/GeneralData"/>
                <ArrayOfCoaches>
                <xsl:copy-of select="."/>
                    </ArrayOfCoaches>
            </Train>

        </xsl:for-each>
            </ArrayOfTrainCoaches>
    </xsl:template>
Look it