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
Форумы портала PHP.SU :: Версия для печати :: Помогите с парсером XML
Форумы портала PHP.SU » » XML и его обработка » Помогите с парсером XML

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

1. 3d_killer - 27 Июля, 2012 - 10:31:04 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1.         <row>
  2.                 <Code>00000000285</Code>
  3.                 <Description>Профилированный лист С8 (ОЦ-РОССИЯ-БЦ-0,7)</Description>
  4.                 <Price>268.55</Price>
  5.         </row>
  6.         <row>
  7.                 <Code>00000000286</Code>
  8.                 <Description>Профилированный лист С8 (ПЭ-РОССИЯ-9006-0,4)</Description>
  9.                 <Price>215</Price>
  10.         </row>
  11.         <row>
  12.                 <Code>00000000287</Code>
  13.                 <Description>Профилированный лист С8 (ПЭ-РОССИЯ-9006-ОН)</Description>
  14.                 <Price>240</Price>
  15.         </row>
  16.         <row>
  17.                 <Code>00000000288</Code>
  18.                 <Description>Профилированный лист С8 (ПЭ-РОССИЯ-9006-ПРЕМИУМ)</Description>
  19.                 <Price>285</Price>
  20.         </row>

есть такой xml загружается из файла, как его пропарсить чтобы занести данные значения в БД?
2. EuGen - 27 Июля, 2012 - 10:37:17 - перейти к сообщению
3. 3d_killer - 27 Июля, 2012 - 10:52:22 - перейти к сообщению
прочитать я его прочитал а как разобрать в цикле на переменные?
4. Toxa - 27 Июля, 2012 - 11:06:47 - перейти к сообщению
5. 3d_killer - 27 Июля, 2012 - 11:15:42 - перейти к сообщению
ну это то же самое непойму как организовать цикл, помогите плз...
6. Toxa - 27 Июля, 2012 - 11:20:32 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $xml = simplexml_load_string($string);
  2.  
  3. foreach($xml->row as $row)
  4. {
  5.   echo $row->Code;
  6.   echo $row->Description;
  7.   echo $row->Price;
  8. }
7. 3d_killer - 27 Июля, 2012 - 11:37:43 - перейти к сообщению
Спасибо, а если у меня попадается группа и нет цены (PRICE) как это проверить чтобы не записывать в базу?
допустим
CODE (htmlphp):
скопировать код в буфер обмена
  1. <row>
  2.                 <Code>00000000002</Code>
  3.                 <Description>Гидро-пароизоляция</Description>
  4.                 <Price/>
  5.         </row>
  6.  
8. Toxa - 27 Июля, 2012 - 11:42:24 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if(isset($row->Price)){
  2.   // Цена есть
  3. }

(Добавление)
в этом случае лучше так
PHP:
скопировать код в буфер обмена
  1. if(!empty($row->Price)){
  2.   // Цена есть
  3. }
9. 3d_killer - 27 Июля, 2012 - 11:46:22 - перейти к сообщению
if(!empty($row->Price)){
// Цена есть
}
подошло спасибо огромное!
10. partos.k - 27 Июля, 2012 - 13:32:29 - перейти к сообщению
Есть такой XML:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. <message>
  4. <datetime>
  5. <day>20120731</day>
  6. </datetime>
  7. <area>
  8. <names>Рынок</names>
  9.                 <frukt name="Яблоко">
  10.                
  11.                 <sort code="01">
  12.                 <value>125000</value>
  13.                 </sort>
  14.  
  15.                 <sort code="02">
  16.                 <value>5000</value>
  17.                 </sort>
  18.  
  19.                 </frukt>
  20.  
  21.  
  22.  
  23.                 <frukt name="Вишня">
  24.                
  25.                 <sort code="03">
  26.                 <value>200000</value>
  27.                 </sort>
  28.  
  29.                 <sort code="04">
  30.                 <value>15000</value>
  31.                 </sort>
  32.  
  33.                 </frukt>
  34.  
  35. </area>
  36. </message>
  37.  


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.   $xml = simplexml_load_file('2.xml');
  5.  
  6.  
  7.     foreach ($xml->area->frukt as $frukt)
  8.    {  $name = $frukt['name'];
  9.      $name = iconv ("UTF-8","windows-1251",$name);
  10.       echo "$name <br>";
  11.  
  12.                 foreach ($xml->area->frukt->sort as $sort) {
  13.  
  14.                 $code = $ sort ['code'];
  15.                $code = iconv ("UTF-8","windows-1251",$code);
  16.  
  17.                 $value = $sort ->value;
  18.                 $value = iconv ("UTF-8","windows-1251",$value);
  19.  
  20.                 echo " $code , $value <br>"; }
  21.  
  22.        }
  23.  
  24.    ?>
  25.  


получаю не то что хочется ((

Яблоко
01 , 125000
02 , 5000
Вишня
01 , 125000
02 , 5000

подскажите как правильно сформировать код что бы получить правильный результат:

Яблоко
01 , 125000
02 , 5000
Вишня
03 , 200000
04 , 15000
11. Toxa - 27 Июля, 2012 - 14:07:09 - перейти к сообщению
внутри второго цикла foreach
PHP:
скопировать код в буфер обмена
  1. $attr = $sort->attributes();
  2. $code = $attr->code;
12. partos.k - 27 Июля, 2012 - 15:51:10 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.  $xml = simplexml_load_file('2.xml');
  5.  
  6.    foreach ($xml->area->frukt as $frukt)
  7.  
  8.   {  $name = $frukt['name'];
  9.  
  10.     $name = iconv ("UTF-8","windows-1251",$name);
  11.  
  12.      echo "$name <br>";
  13.  
  14.  
  15.                foreach ($xml->area->frukt->sort as $sort) {
  16.  
  17.                $code = $sort ['code'];
  18.  
  19.                $code = iconv ("UTF-8","windows-1251",$code);
  20.  
  21.  
  22.  
  23.                $value = $sort->value;
  24.  
  25.                $value = iconv ("UTF-8","windows-1251",$value);
  26.  
  27.                $attr = $sort->attributes();
  28.                                 $code = $attr->code;
  29.  
  30.                echo " $code , $value, $attr <br>"; }
  31.  
  32.       }
  33.  


Яблоко
01 , 125000, 01
02 , 5000, 02
Вишня
01 , 125000, 01
02 , 5000, 02
результат тот же что и был
13. partos.k - 29 Июля, 2012 - 14:00:15 - перейти к сообщению
блин ни кто не сталкивался с такой задачей ?(((
14. partos.k - 30 Июля, 2012 - 12:44:02 - перейти к сообщению
всё решение нашлось, если кому надо, второй цикл должен быть:

 

Powered by ExBB FM 1.0 RC1