Это мой ввод XML, который я должен преобразовать:
<_-FOX_-SHPMNT06>
<IDOC BEGIN="1">
<E1EDT20 SEGMENT="1">
<TKNUM>8201333969</TKNUM>
<TPBEZ>FDC Domestic YT</TPBEZ`
<E1EDL20 SEGMENT="1">
<VBELN>3460011248</VBELN>
<E1EDT13 SEGMENT="1">
<QUALF>015</QUALF>
<NTANF>20181016</NTANF>
<NTANZ>000000</NTANZ>
<NTEND>20181016</NTEND>
<NTENZ>000000</NTENZ>
<ISDD>00000000</ISDD>
<ISDZ>000000</ISDZ>
<IEDD>00000000</IEDD>
<IEDZ>000000</IEDZ>
</E1EDT13>
<E1TXTH8 SEGMENT="1">
<TDOBJECT>VBBK</TDOBJECT>
<TDOBNAME>3460011248</TDOBNAME>
<TDID>Z022</TDID>
<TDSPRAS>D</TDSPRAS>
<LANGUA_ISO>DE</LANGUA_ISO>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
<TDLINE>Der Unterzeichner erklärt, dass die in diesem Dokument aufgeführten</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDLINE>Waren Ursprungserzeugnisse aus China sind und im Präferenzverkehr mit</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDLINE>CH-EU entsprechen.</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
</E1TXTP8>
</E1TXTH8>
<E1TXTH8 SEGMENT="1">
<TDOBJECT>VBBK</TDOBJECT>
<TDOBNAME>3460011248</TDOBNAME>
<TDID>Z024</TDID>
<TDSPRAS>D</TDSPRAS>
<LANGUA_ISO>DE</LANGUA_ISO>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
<TDLINE>Ihre Artikelnr. 0068018</TDLINE>
</E1TXTP8>
</E1TXTH8>
</E1EDL20>
</E1EDT20>
</IDOC>
</_-FOX_-SHPMNT06>
, и это то, что мне нужно в качестве результата XML:
<_-FOX_-SHPMNT06>
<IDOC BEGIN="1">
<E1EDT20 SEGMENT="1">
<TKNUM>8201333969</TKNUM>
<TPBEZ>FDC Domestic YT</TPBEZ>
<E1EDL20 SEGMENT="1">
<VBELN>3460011248</VBELN>
<E1TXTH8 SEGMENT="1">
<TDOBJECT/>
<TDOBNAME/>
<TDID/>
<TDSPRAS/>
<LANGUA_ISO/>
<E1TXTP8 SEGMENT="1">
<TDFORMAT/>
<TDLINE>@ 01 E Der Unterzeichner erklärt, dass die in diesem Dokument aufgeführten</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT/>
<TDLINE>@ 02 E Waren Ursprungserzeugnisse aus China sind und im Präferenzverkehr mit</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT/>
<TDLINE>@ 03 E CH-EU entsprechen.</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT/>
<TDLINE>@ 04 E </TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT/>
<TDLINE>@ 05 E Ihre Artikelnr. 0068018</TDLINE>
</E1TXTP8>
</E1TXTH8>
<E1TXTH8 SEGMENT="1">
<TDOBJECT>VBBK</TDOBJECT>
<TDOBNAME>3460011248</TDOBNAME>
<TDID>Z022</TDID>
<TDSPRAS>D</TDSPRAS>
<LANGUA_ISO>DE</LANGUA_ISO>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
<TDLINE>Der Unterzeichner erklärt, dass die in diesem Dokument aufgeführten</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDLINE>Waren Ursprungserzeugnisse aus China sind und im Präferenzverkehr mit</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDLINE>CH-EU entsprechen.</TDLINE>
</E1TXTP8>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
</E1TXTP8>
</E1TXTH8>
<E1TXTH8 SEGMENT="1">
<TDOBJECT>VBBK</TDOBJECT>
<TDOBNAME>3460011248</TDOBNAME>
<TDID>Z024</TDID>
<TDSPRAS>D</TDSPRAS>
<LANGUA_ISO>DE</LANGUA_ISO>
<E1TXTP8 SEGMENT="1">
<TDFORMAT>*</TDFORMAT>
<TDLINE>Ihre Artikelnr. 0068018</TDLINE>
</E1TXTP8>
</E1TXTH8>
</E1EDL20>
</E1EDT20>
</IDOC>
</_-FOX_-SHPMNT06>
Мне нужно вместо этого получить глобальный счетчикиспользования "position ()", потому что я не хочу, чтобы счетчик сбрасывался на 0 в каждом "for-each":
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<!-- Identity template : copy all text nodes, elements and attributes -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="E1EDT13[position()=last()]">
<E1TXTH8 SEGMENT="1">
<TDOBJECT/>
<TDOBNAME/>
<TDID/>
<TDSPRAS/>
<LANGUA_ISO/>
<xsl:for-each select="following-sibling::E1TXTH8[TDID='Z002']/E1TXTP8">
<E1TXTP8 SEGMENT="1">
<xsl:variable name="typeA">A</xsl:variable>
<TDFORMAT/>
<TDLINE>
<xsl:value-of select="concat('@', ' ', format-number(position(),'00'), ' ', $typeA, ' ', TDLINE)"/>
</TDLINE>
</E1TXTP8>
</xsl:for-each>
<xsl:for-each select="following-sibling::E1TXTH8[TDID='Z022']/E1TXTP8">
<E1TXTP8 SEGMENT="1">
<xsl:variable name="typeE">E</xsl:variable>
<TDFORMAT/>
<TDLINE>
<xsl:value-of select="concat('@', ' ', format-number(position(),'00'), ' ', $typeE, ' ', TDLINE)"/>
</TDLINE>
</E1TXTP8>
</xsl:for-each>
<xsl:for-each select="following-sibling::E1TXTH8[TDID='Z024']/E1TXTP8">
<E1TXTP8 SEGMENT="1">
<xsl:variable name="typeE">E</xsl:variable>
<TDFORMAT/>
<TDLINE>
<xsl:value-of select="concat('@', ' ', format number(position(),'00'), ' ', $typeE, ' ', TDLINE)"/>
</TDLINE>
</E1TXTP8>
</xsl:for-each>
</E1TXTH8>
</xsl:template>
</xsl:stylesheet>
Есть ли способ управлять этим?Если я использую «position ()», счетчики будут 01 02 03 04 01, и мне нужно 01 02 03 04 05, даже если у меня будет больше «для каждого» * 1010 *