вложенная группировка в xslt 1.0 - PullRequest
0 голосов
/ 10 марта 2019

Прежде чем перейти к актуальному вопросу, я должен сказать определенные вещи.я так понимаю эта тема уже много обсуждалась на этом форуме.но все же моя ситуация немного уникальна.

Мне нужно выполнить это преобразование внутри инструмента под названием 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>&amp; &amp; : Original Batch &amp; differs from Confirmed Batch &amp;</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>&amp; &amp; : Original Batch &amp; differs from Confirmed Batch &amp;</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>&amp; &amp; : Original Batch &amp; differs from Confirmed Batch &amp;</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>&amp; &amp; : Original Batch &amp; differs from Confirmed Batch &amp;</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>&amp; &amp; : Original Batch &amp; differs from Confirmed Batch &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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>&amp; exceeded by &amp; &amp; &amp;</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 &amp;1 and &amp;2 in company code &amp;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>

Теперь я скажу правила группировки:

  1. docnum - это элемент для группировки
  2. все элементы docnum, имеющие одинаковые значения rcvprn и msgtypдолжны быть сгруппированы в один, а их идентификаторы электронной почты "to" и "cc" должны быть соответственно объединены друг с другом.

будущее требование в будущем может быть пара другихполя могут быть добавлены в клуб документов поля.

1 Ответ

0 голосов
/ 11 марта 2019

Я не вижу ничего плохого в вашем XSLT, поэтому ваш XSLT-процессор должен быть очень старым, если он не поддерживает xsl:key. (Или, возможно, он не похож на concat или generate-id. Вы можете попытаться определить ключ, например, как <xsl:key name="groups" match="item_type" use="."/>. Хотя это не очень хорошо для получения выходных данных, это может помочь сузить проблему с процессор)

Если xsl:key действительно не поддерживается, вам придется вернуться к неэффективному способу ведения дел и просто проверить предшествующих братьев и сестер

Попробуйте это 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:template match="/root">
    <root>
        <xsl:for-each select="order">
            <order>                
                <xsl:for-each select="item/item_type[not(. = preceding-sibling::item_type)]">
                    <item>
                        <xsl:value-of select="."/>
                    </item>
                </xsl:for-each>     
            </order>
        </xsl:for-each>     
    </root>
</xsl:template>
</xsl:stylesheet>

РЕДАКТИРОВАТЬ: Чтобы применить этот пример на практике, для вашего реального XML, он становится намного хуже, но попробуйте это (очень неэффективно) 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:template match="/">
  <root>
    <xsl:for-each select="/root/element[not(rcvprn = preceding-sibling::element/rcvprn)]">
      <xsl:variable name="rcvprn" select="rcvprn" />
      <xsl:variable name="rvcprngroup" select="../element[rcvprn = $rcvprn]" />

      <xsl:for-each select="$rvcprngroup[not(mestyp = preceding-sibling::element[rcvprn = $rcvprn]/mestyp)]">
        <xsl:variable name="mestyp" select="mestyp" />
        <xsl:variable name="mestypgroup" select="$rvcprngroup[mestyp = $mestyp]" />

        <element>
          <xsl:copy-of select="mestyp|rcvprn"/>
          <emailidTo>
            <xsl:for-each select="$mestypgroup">
              <xsl:value-of select="emailidTo" />
              <xsl:text>;</xsl:text>
            </xsl:for-each>
          </emailidTo>
          <docnum>
            <xsl:for-each select="$mestypgroup[not(docnum = preceding-sibling::element[rcvprn = $rcvprn and mestyp = $mestyp]/docnum)]">
              <xsl:value-of select="docnum" />
              <xsl:text>&#10;</xsl:text>
            </xsl:for-each>
          </docnum>
        </element>
      </xsl:for-each>
    </xsl:for-each>     
  </root>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...