Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пмомгите распарсить XML

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Преобразование xml и разбиение его на несколько файлов.
new_bember
Отправлено: 20 Декабря, 2016 - 11:35:19
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Пните меня в правильном направлении, пожалуйста. Есть следующая задача:
На фтп на протяжении дня падают зип архивы вида GUID.mbsu, GUID на данный момент две штуки (айдишники торговых). Нужно этот архив распаковать, достать оттуда xml - с этим я вроде разобрался.
XML содержит информацию о заказах/оплатах в следующем виде:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <T_ORDER_TITLE>
  3.   <N_CARRY>true</N_CARRY>
  4.   <N_CHECK_NUMBER></N_CHECK_NUMBER>
  5.   <N_CLIENTID>198785</N_CLIENTID>
  6.   <N_COMMENT></N_COMMENT>
  7.   <N_CONTRACTID>81</N_CONTRACTID>
  8.   <N_CREATE_DATE>1478604069724</N_CREATE_DATE>
  9.   <N_DATE>1478604594096</N_DATE>
  10.   <N_DELAY>true</N_DELAY>
  11.   <N_FORMID>1</N_FORMID>
  12.   <N_GEOADDRESS>проспект Грушевського, Коломия, Івано-Франківська область, Украина</N_GEOADDRESS>
  13.   <N_HAVE_DISCOUNT>false</N_HAVE_DISCOUNT>
  14.   <N_ID>70ebca18-fa1c-4ab3-a93b-b762ad81138d</N_ID>
  15.   <N_LAT>48.5259135</N_LAT>
  16.   <N_LNG>25.0280832</N_LNG>
  17.   <N_MESSAGE_NUMBER>0</N_MESSAGE_NUMBER>
  18.   <N_PARENTID>198785</N_PARENTID>
  19.   <N_PRICEID>22</N_PRICEID>
  20.   <N_SHIPMENT_DATE>0</N_SHIPMENT_DATE>
  21.   <N_SUM>358.0</N_SUM>
  22.   <N_WAREHOUSE_ID>ALL</N_WAREHOUSE_ID>
  23. </T_ORDER_TITLE>
  24. <T_ORDER_TABLE>
  25.   <N_DATE>1478604594096</N_DATE>
  26.   <N_DISCOUNT_PERCENT>0.0</N_DISCOUNT_PERCENT>
  27.   <N_FACTOR>1.0</N_FACTOR>
  28.   <N_ID>70ebca18-fa1c-4ab3-a93b-b762ad81138d1000004215</N_ID>
  29.   <N_LINE_NUMBER>1</N_LINE_NUMBER>
  30.   <N_MANUAL_PRICE>false</N_MANUAL_PRICE>
  31.   <N_NOMENID>1000004215</N_NOMENID>
  32.   <N_NUMBER>1.0</N_NUMBER>
  33.   <N_PRICE>37.0</N_PRICE>
  34.   <N_SUM>37.0</N_SUM>
  35.   <N_TITLEID>70ebca18-fa1c-4ab3-a93b-b762ad81138d</N_TITLEID>
  36.   <N_UNIT_ID>ALL</N_UNIT_ID>
  37. </T_ORDER_TABLE>
  38. <T_CASH_ORDERS>
  39.   <N_BASE_ID>51137cff-f8ca-4c08-88dd-062cf3602fc9</N_BASE_ID>
  40.   <N_CARRY>true</N_CARRY>
  41.   <N_CHECK_NUMBER></N_CHECK_NUMBER>
  42.   <N_COMMENT></N_COMMENT>
  43.   <N_CONTRACTID>162</N_CONTRACTID>
  44.   <N_CREATE_DATE>1478764605513</N_CREATE_DATE>
  45.   <N_DATE>1478764607794</N_DATE>
  46.   <N_DEBT_NUMBER>Новый 433,80 $ 10.11.2016 07:56:19</N_DEBT_NUMBER>
  47.   <N_DEBT_TYPE>Заказ</N_DEBT_TYPE>
  48.   <N_FORMID>1</N_FORMID>
  49.   <N_GEOADDRESS>М06, Закарпатська область, Украина</N_GEOADDRESS>
  50.   <N_ID>f7670019-df2d-4d1a-b097-afe8502dbba1</N_ID>
  51.   <N_LAT>48.4681651</N_LAT>
  52.   <N_LNG>22.6181861</N_LNG>
  53.   <N_MESSAGE_NUMBER>0</N_MESSAGE_NUMBER>
  54.   <N_PARENTID>198594</N_PARENTID>
  55.   <N_SUM>433.8</N_SUM>
  56. </T_CASH_ORDERS>
  57.  

T_ORDER_TITLE - общая информация о заказе
T_ORDER_TABLE - информация по каждой позиции заказа
T_CASH_ORDERS - оплата по заказу
Этих элементов может быть много, типа несколько заказов сразу. Мне нужно для каждого заказа/оплаты получить xml вида:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <DocID xmlns="Documents" CodeSpace="my" DocID="57614" VersionID="1" BranID="101" BranName="PCH">
  3.         <CreID xmlns="Subjects" SubjID="159">
  4.                 <SubjName>Склад Машина</SubjName>
  5.         </CreID>
  6.         <DebID xmlns="Subjects" SubjID="1083">
  7.                 <SubjName>Склад Хмельницький</SubjName>
  8.         </DebID>
  9.         <TemplID xmlns="Templates" TemplID="41" TemplName="Товар на склад"/>
  10.         <PriceID xmlns="PriceHeads" PriceID="22" PriceName="Базова"/>
  11.         <DocCode>43585518</DocCode>
  12.         <ExtraDoc> </ExtraDoc>
  13.         <Comments/>
  14.         <GDS>-1</GDS>
  15.         <DocDate>20161205</DocDate>
  16.         <DocTax>0</DocTax>
  17.         <DocSum>440</DocSum>
  18.         <DocTaxSum>0</DocTaxSum>
  19.         <AddrID/>
  20.         <RateLimit>0</RateLimit>
  21.         <Patterns xmlns="Patterns">
  22.                 <Item GlobID="1000002707" ItemID="16149471" ItemName="Dekomarin 65cm A 20" ItemExt="" ItemShort="65cm A 20" ExtraCode="A 20" PerPack="1" PerCase="1" PerPall="1" Weight="8.7" Volume="0.063" SUF="" BaseTax="0" EAN="8690552310065" GDS="-1" AlcTax="" TAR="0" UnitFactor="1" UnitName="штука" UnitShort="шт." WGT="0" ProdID="1000000007" ProdName="On Grup" MarkID="1000000033" MarkName="D65m">
  23.                         <BasePrice>38</BasePrice>
  24.                         <Price>38</Price>
  25.                         <Ordered>0</Ordered>
  26.                         <Quantity>2</Quantity>
  27.                         <Discount>0</Discount>
  28.                 </Item>
  29.         </Patterns>
  30. </DocID>
  31.  

Пока получил общую информацию по заказам:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. /**
  5.  * @author new_bember
  6.  * @copyright 2016
  7.  */
  8. $dir = 'C:\in';
  9. $files = scandir($dir);
  10.  
  11. $filename = $files[2];
  12. print_r($filename);
  13. $xml = simplexml_load_file("C:\\in\\".$filename) or die ("Error. Cannot create object");
  14. foreach ($xml->T_ORDER_TITLE as $element) {
  15.   echo "Order number: ".$element->N_ID . ", ";
  16.   echo "SubjID: ".$element->N_PARENTID . ", ";
  17.   echo "OrderSum: ".$element->N_SUM . "<br>";
  18.    
  19. }
  20.  
  21. ?>
  22.  

А вот чего дальше делать, что-то не догоняю.. Я конечно курю все эти доки, но пинок в правильном направлении будет хорошим подспорьем. Заранее благодарен.
 
 Top
new_bember
Отправлено: 20 Декабря, 2016 - 17:54:02
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Вытащил элементы каждого заказа (правда что-то идёт не так, позже разберусь, они повторяются)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. /**
  5.  * @author new_bember
  6.  * @copyright 2016
  7.  */
  8. $dir = 'C:\in';
  9. $files = scandir($dir);
  10. $filename = $files[2];
  11. //print_r($filename);
  12. $xml = simplexml_load_file("C:\\in\\".$filename) or die ("Error. Cannot create object");
  13. $order_count = $xml->T_ORDER_TITLE->count();
  14. echo "Orders count: " . $order_count . "<br>";
  15. $items_count = $xml->T_ORDER_TABLE->count();
  16. echo "Items quantity: " . $items_count . "<br>";    
  17. $pko_count = $xml->T_CASH_ORDERS->count();
  18. echo "Payments count: " . $pko_count . "<br>";
  19. for ($i=0; $i<$order_count; $i++) {
  20.    for ($j=0; $j<$items_count; $j++) {
  21.       if ($xml->T_ORDER_TITLE[$i]->N_ID = $xml->T_ORDER_TABLE[$j]->N_TITLEID)
  22.            echo "Ordered: " . $xml->T_ORDER_TITLE[$i]->N_ID . ", " . $xml->T_ORDER_TABLE[$j]->N_NOMENID . "<br>";
  23.    }        
  24. }    
  25. ?>
  26.  

Теперь каким-то образом нужно создавать новую xml для каждого заказа.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB