Это упрощенная версия XML-сообщения (SAP-IDOC), которую мне нужно преобразовать в более легкий для чтения XML, как показано в примере ниже.
Это IDOC доставки SAP, которая дает мнеинформация для отгрузки и ее позиции.Проблема в том, что позиции 10 и 20 могут быть в одной коробке (E1EDL37) и иметь другой номер для отслеживания (поле TRACKN), чем позиция 3.
<DELVRY07>
<IDOC>
<E1EDL20> <!-- Contains all positions-->
<E1EDL24> <!--one Node for each position -->
<POSNR>000010</POSNR>
<MATNR>123</MATNR>
<E1EDL41>
<BSTNR>Fall 1</BSTNR>
</E1EDL41>
</E1EDL24>
<E1EDL24><!--one Node for each position -->
<POSNR>000020</POSNR>
<MATNR>456</MATNR>
<E1EDL41>
<BSTNR>Fall 2</BSTNR>
</E1EDL41>
</E1EDL24>
<E1EDL24><!--one Node for each position -->
<POSNR>000030</POSNR>
<MATNR>789</MATNR>
<E1EDL41>
<BSTNR>Fall 3</BSTNR>
</E1EDL41>
</E1EDL24>
<E1EDL37><!--one Node for every carton-->
<E1EDL49>
<XSITD>UPS1</XSITD>
<TRACKN>Track 1</TRACKN>
</E1EDL49>
<E1EDL44><!-- every position in the carton-->
<VBELN>123456</VBELN>
<POSNR>000010</POSNR>
</E1EDL44>
<E1EDL44><!-- every position in the carton-->
<VBELN>456789</VBELN>
<POSNR>000020</POSNR>
</E1EDL44>
</E1EDL37>
<E1EDL37><!--one Node for every carton-->
<E1EDL49>
<XSITD>DPD</XSITD>
<TRACKN>Track 2</TRACKN>
</E1EDL49>
<E1EDL44><!-- every position in the carton-->
<VBELN>123456</VBELN>
<POSNR>000030</POSNR>
</E1EDL44>
</E1EDL37>
</E1EDL20>
</IDOC>
это должно быть сообщение xml после преобразования xslt (или схожее сообщение):
<Shipment>
<Positions>
<POSNR>000010</POSNR>
<MATNR>123</MATNR>
<BSTNR>Fall 1</BSTNR>
<TRACKN>Track 1</TRACKN>
<XSITD>UPS1</XSITD>
</Positions>
<Positions>
<POSNR>000020</POSNR>
<MATNR>456</MATNR>
<BSTNR>Fall 2</BSTNR>
<TRACKN>Track 1</TRACKN>
<XSITD>UPS1</XSITD>
</Positions>
<Positions>
<POSNR>000030</POSNR>
<MATNR>123</MATNR>
<BSTNR>Fall 3</BSTNR>
<TRACKN>Track 2</TRACKN>
<XSITD>DPD</XSITD>
</Positions>
</Shipment>
Я попытался пройти элементы E1EDL24 с помощью цикла и записать информацию в переменные.Но с этого момента мне нужно будет выполнить цикл по всему E1EDL44 и получить значение поля TRACKN элемента E1EDL49 выше.
Не могли бы вы помочь мне найти способ сделать это?
Большое спасибо за вашу помощь!