Прежде чем перейти к актуальному вопросу, я должен сказать определенные вещи.я так понимаю эта тема уже много обсуждалась на этом форуме.но все же моя ситуация немного уникальна.
Мне нужно выполнить это преобразование внутри инструмента под названием BMC Atrium Orchestrator версии 7.9 , который использует не только xslt 1.0, но и используемый им XSLT-процессор.немного старше или не очень дружелюбный. Почему я говорю это в самом начале:
xslt 1.0 вложенная группировка
это очень простое вложенное преобразование, указанное выше в самой ссылкеЯ не могу выполнить в этом инструменте.просто скопировать и вставить исходный XML и XSLT это показывает ошибку.
ниже - источник xml
<root>
<order>
<item>
<item_type>A</item_type>
<item_type>A</item_type>
<item_type>B</item_type>
<item_type>C</item_type>
</item>
</order>
<order>
<item>
<item_type>A</item_type>
<item_type>B</item_type>
<item_type>C</item_type>
<item_type>C</item_type>
</item>
</order>
<order>
<item>
<item_type>C</item_type>
<item_type>C</item_type>
<item_type>B</item_type>
</item>
</order>
</root>
ниже - источник xslt
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:strip-space elements="*"/>
<xsl:key name="groups" match="item_type" use="concat(., '|', generate-id(ancestor::order))"/>
<xsl:template match="/root">
<root>
<xsl:for-each select="order">
<order>
<xsl:for-each select="item/item_type[generate-id() = generate-id(key('groups', concat(., '|', generate-id(ancestor::order)))[1])]">
<item>
<xsl:value-of select="."/>
</item>
</xsl:for-each>
</order>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
выше xml & XSLT исключительно для того, чтобы сказать, что такое простое преобразование по какой-то причине не работает с моим инструментом.скриншоты в разделе комментариев.но это не моя настоящая проблема.как я дал фон, теперь перехожу к актуальному вопросу
мой источник xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>
<credat>20180518</credat>
<cretim>06:25:10</cretim>
<docnum>1177016</docnum>
<emailidCc>VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidCc>
<emailidTo>RAJASHEKAR.ALETI@MERCK.COM;RAJNISH.SINHA@MERCK.COM</emailidTo>
<field1>MATERIAL-039723</field1>
<field14>ENTRY_QNT-150.000</field14>
<field15>ENTRY_UOM-PK</field15>
<field2>PLANT-GB20</field2>
<field3>STGE_LOC-GB30</field3>
<field4>BATCH-A012A02</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& & : Original Batch & differs from Confirmed Batch &</statusMessage>
</element>
<element>
<credat>20180518</credat>
<cretim>06:26:30</cretim>
<docnum>1177017</docnum>
<emailidCc>VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidCc>
<emailidTo>RAJASHEKAR.ALETI@MERCK.COM;RAJNISH.SINHA@MERCK.COM</emailidTo>
<field1>MATERIAL-039723</field1>
<field14>ENTRY_QNT-150.000</field14>
<field15>ENTRY_UOM-PK</field15>
<field2>PLANT-GB20</field2>
<field3>STGE_LOC-GB30</field3>
<field4>BATCH-A012A02</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& & : Original Batch & differs from Confirmed Batch &</statusMessage>
</element>
<element>
<credat>20180518</credat>
<cretim>06:26:51</cretim>
<docnum>1177018</docnum>
<emailidCc>VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidCc>
<emailidTo>RAJASHEKAR.ALETI@MERCK.COM;RAJNISH.SINHA@MERCK.COM</emailidTo>
<field1>MATERIAL-039723</field1>
<field14>ENTRY_QNT-150.000</field14>
<field15>ENTRY_UOM-PK</field15>
<field2>PLANT-GB20</field2>
<field3>STGE_LOC-GB30</field3>
<field4>BATCH-A012A02</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& & : Original Batch & differs from Confirmed Batch &</statusMessage>
</element>
<element>
<credat>20180604</credat>
<cretim>12:21:35</cretim>
<docnum>1177592</docnum>
<emailidCc>VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidCc>
<emailidTo>RAJASHEKAR.ALETI@MERCK.COM;RAJNISH.SINHA@MERCK.COM</emailidTo>
<field1>MATERIAL-039723</field1>
<field14>ENTRY_QNT-150.000</field14>
<field15>ENTRY_UOM-PK</field15>
<field2>PLANT-GB20</field2>
<field3>STGE_LOC-GB30</field3>
<field4>BATCH-A012A02</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& & : Original Batch & differs from Confirmed Batch &</statusMessage>
</element>
<element>
<credat>20180604</credat>
<cretim>12:21:45</cretim>
<docnum>1177593</docnum>
<emailidCc>VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidCc>
<emailidTo>RAJASHEKAR.ALETI@MERCK.COM;RAJNISH.SINHA@MERCK.COM</emailidTo>
<field1>MATERIAL-039723</field1>
<field14>ENTRY_QNT-150.000</field14>
<field15>ENTRY_UOM-PK</field15>
<field2>PLANT-GB20</field2>
<field3>STGE_LOC-GB30</field3>
<field4>BATCH-A012A02</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& & : Original Batch & differs from Confirmed Batch &</statusMessage>
</element>
<element>
<credat>20180614</credat>
<cretim>16:04:13</cretim>
<docnum>1178094</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180618</credat>
<cretim>12:07:05</cretim>
<docnum>1178407</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180619</credat>
<cretim>09:08:31</cretim>
<docnum>1178456</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180619</credat>
<cretim>09:12:07</cretim>
<docnum>1178644</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180619</credat>
<cretim>10:13:17</cretim>
<docnum>1178649</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:25:03</cretim>
<docnum>1178722</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:27:48</cretim>
<docnum>1178723</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:31:47</cretim>
<docnum>1178724</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:35:49</cretim>
<docnum>1178725</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:38:50</cretim>
<docnum>1178726</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:42:36</cretim>
<docnum>1178727</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>15:44:40</cretim>
<docnum>1178728</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180620</credat>
<cretim>16:01:54</cretim>
<docnum>1178732</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT121</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180621</credat>
<cretim>08:21:13</cretim>
<docnum>1178745</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT121</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180628</credat>
<cretim>10:17:25</cretim>
<docnum>1180138</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCR</mestyp>
<rcvprn>SR1CLNT121</rcvprn>
<statusCode>51</statusCode>
<statusMessage>& exceeded by & & &</statusMessage>
</element>
<element>
<credat>20180628</credat>
<cretim>10:19:32</cretim>
<docnum>1180139</docnum>
<emailidCc>RAJASHEKAR.ALETI@MERCK.COM</emailidCc>
<emailidTo>SREENIVAS.K@MERCK.COM</emailidTo>
<field1>MATERIAL-111116</field1>
<field14>ENTRY_QNT-20.000</field14>
<field15>ENTRY_UOM-EA</field15>
<field2>PLANT-RU20</field2>
<field3>STGE_LOC-RU20</field3>
<field4>BATCH-E979A01</field4>
<field5>MOVE_TYPE-101</field5>
<idocStatus>Business Input Needed</idocStatus>
<mestyp>MBGMCL</mestyp>
<rcvprn>SR1CLNT120</rcvprn>
<statusCode>51</statusCode>
<statusMessage>Posting only possible in periods &1 and &2 in company code &3</statusMessage>
</element>
</root>
мой желаемый результат:
<root>
<element>
<rcvprn>SR1CLNT120</rcvprn>
<mestype>MBGMCR</mestype>
<emailidCc>RAJASHEKAR.ALETI@xx.COM</emailidCc> <emailidTo>SREENIVAS.K@MERCK.COM;VIJAYMAHANTESH.PAWADI1@xx.COM</emailidTo>
<docnum>
1177016
1177017
1177018
1177592
1177593
1178094
1178407
1178456
1178644
1178649
1178722
1178723
1178724
1178725
1178726
1178727
1178728
</docnum>
</element>
<element>
<emailidCc>RAJASHEKAR.ALETI@xx.COM</emailidCc>
<emailidTo>SREENIVAS.K@xxx.COM;VIJAYMAHANTESH.PAWADI1@xx.COM</emailidTo>
<rcvprn>SR1CLNT121</rcvprn>
<mestype>MBGMCR</mestype>
<docnum>
1178732
1178745
1180138
</docnum>
</element>
<element>
<emailidCc>RAJASHEKAR.ALETI@xx.COM</emailidCc>
<emailidTo>SREENIVAS.K@xxx.COM;VIJAYMAHANTESH.PAWADI1@xx.COM</emailidTo>
<rcvprn>SR1CLNT120</rcvprn>
<mestype>MBGMCL</mestype>
<docnum>
1180139
</docnum>
</element>
</root>
Теперь я скажу правила группировки:
- docnum - это элемент для группировки
- все элементы docnum, имеющие одинаковые значения rcvprn и msgtypдолжны быть сгруппированы в один, а их идентификаторы электронной почты "to" и "cc" должны быть соответственно объединены друг с другом.
будущее требование в будущем может быть пара другихполя могут быть добавлены в клуб документов поля.