XML XSLT包装特定元素

时间:2017-03-10 22:30:55

标签: xml xslt

我正在尝试使用XSLT转换来更改此XML,但似乎我无法管理它。我想要更改的XML是:

<GOOITEGDS>
<GroMasGDS46>0.046</GroMasGDS46>
<NetMasGDS48>0.01</NetMasGDS48>
<ProReqGDI1>10</ProReqGDI1>
<PreProGDI1>00</PreProGDI1>
<ComNatProGIM1>000</ComNatProGIM1>
<StaValAmoGDI1>12.28</StaValAmoGDI1>
<PreDocTypAR21>380</PreDocTypAR21>
<PreDocRefAR26>3672</PreDocRefAR26>
<PreDocCatPREADMREF21>Z</PreDocCatPREADMREF21>
<DocTypDC21>N380</DocTypDC21>
<DocRefDC23>2712</DocRefDC23>
<DocTypDC21>Y900</DocTypDC21>
<DocRefDC23>-</DocRefDC23>
<DocTypDC21>Y922</DocTypDC21>
<DocRefDC23>-</DocRefDC23>
<ComNomCMD1>71171900</ComNomCMD1>
<TARCodCMD1>00</TARCodCMD1>
<TARFirAddCodCMD1>0000</TARFirAddCodCMD1>
<TARSecAddCodCMD1>0000</TARSecAddCodCMD1>
<NAtAddCodCMD1>0000</NAtAddCodCMD1>
</GOOITEGDS>

并且我希望XSLT能够将以下结果包含在另一个节点中的3个特定元素

    <GOOITEGDS>
    <GroMasGDS46>0.046</GroMasGDS46>
    <NetMasGDS48>0.01</NetMasGDS48>
    <ProReqGDI1>10</ProReqGDI1>
    <PreProGDI1>00</PreProGDI1>
    <ComNatProGIM1>000</ComNatProGIM1>
    <StaValAmoGDI1>12.28</StaValAmoGDI1>
<PREADMREFAR2>
    <PreDocTypAR21>380</PreDocTypAR21>
    <PreDocRefAR26>3672</PreDocRefAR26>
    <PreDocCatPREADMREF21>Z</PreDocCatPREADMREF21>
</PREADMREFAR2>
    <DocTypDC21>N380</DocTypDC21>
    <DocRefDC23>2712</DocRefDC23>
    <DocTypDC21>Y900</DocTypDC21>
    <DocRefDC23>-</DocRefDC23>
    <DocTypDC21>Y922</DocTypDC21>
    <DocRefDC23>-</DocRefDC23>
    <ComNomCMD1>71171900</ComNomCMD1>
    <TARCodCMD1>00</TARCodCMD1>
    <TARFirAddCodCMD1>0000</TARFirAddCodCMD1>
    <TARSecAddCodCMD1>0000</TARSecAddCodCMD1>
    <NAtAddCodCMD1>0000</NAtAddCodCMD1>
    </GOOITEGDS>

我尝试了以下内容,但它分别包装了三个元素。

  <xsl:template match="PreDocTypAR21|PreDocRefAR26|PreDocCatPREADMREF21">
   <PREADMREFAR2>
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:apply-templates select="node()"/>
  </xsl:copy>
 </PREADMREFAR2>
</xsl:template> 

非常感谢,Nikos

1 个答案:

答案 0 :(得分:0)

如果节点的顺序已知并且不变,则可以使用:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/GOOITEGDS">
    <xsl:copy>
        <xsl:copy-of select="PreDocTypAR21/preceding-sibling::*"/>
        <PREADMREFAR2>
            <xsl:copy-of select="PreDocTypAR21 | PreDocRefAR26 | PreDocCatPREADMREF21"/>
        </PREADMREFAR2>
        <xsl:copy-of select="PreDocCatPREADMREF21/following-sibling::*"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
相关问题