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 :: xPath получить значение по атрибуту name="Тип"

 PHP.SU

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


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

> Без описания
and_07
Отправлено: 29 Октября, 2013 - 15:35:39
Post Id


Гость


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


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




1) если атрибут латиницей то все работает!!

метод (выкинул лишнее что бы не мешалось)
PHP:
скопировать код в буфер обмена
  1.  
  2.         public static function read_xml($filename){
  3.                 try{
  4.                         if (file_exists($filename)) {
  5.                                
  6.                                 $yml_catalog = simplexml_load_file($filename);
  7.                                 unlink($filename);
  8.                                 if(!$yml_catalog)
  9.                                         throw new Exception("Файл поврежден");
  10.                                 $offer = $yml_catalog->xpath('//shop/offers/offer');
  11.  
  12.                                 $yml_array = array();
  13.                                 foreach($offer as $o)
  14.                                 {
  15.                                         foreach($o as $k=>$v)
  16.                                         {
  17.                                                 if($k === 'param'){
  18.                                                         $tmp = $o->xpath('param[@name="'.$v->attributes()->name[0].'"]');
  19.                                                         $stmp= (string)$tmp[0];
  20.                                                         $yml_array[(string)$v->attributes()->name[0]] = (isset($stmp) && !empty($stmp))?(string)$tmp[0]:null;
  21.                                                 }else{
  22.                                                         $yml_array[(string)$k] = !empty($o->$k)?(string)$o->$k:null;
  23.                                                 }
  24.                                         }
  25.                                         unset($yml_array);
  26.                                 }
  27.                                 unset($yml_array);
  28.                                 $files_to_zip = array(
  29.                                         $filename
  30.                                 );
  31.                                                
  32.                         } else {
  33.                                 exit('Не удалось открыть файл!!!');
  34.                         }
  35.  
  36.                 }catch(Exception $e){
  37.                         echo $e->getMessage();
  38.                 }
  39.         }
  40.  


данные
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. .....
  4.       <offer id="19928165" available="true">
  5.         <url>http://www.ozon.ru/context/detail/id/19928165/?from=prt_xml_facet</url>
  6.         <price>521</price>
  7.         <currencyId>RUR</currencyId>
  8.         <categoryId>1164326</categoryId>
  9.         <categoryId>1167155</categoryId>
  10.         <categoryId>1165293</categoryId>
  11.         <categoryId>1162204</categoryId>
  12.         <picture>http://www.ozon.ru/multimedia/audio_cd_covers/1005839109.jpg</picture>
  13.         <delivery>true</delivery>
  14.         <orderingTime>
  15.           <ordering>На складе</ordering>
  16.         </orderingTime>
  17.         <name>Сучкорез FIT мини, 317 мм. 77115</name>
  18.         <vendor>FIT</vendor>
  19.         <vendorCode>77115</vendorCode>
  20.         <description>Сучкорез FIT мини применяется при работе в саду или на приусадебном участке для срезания сухих, поврежденных или больных веток, а также для формирования кроны деревьев и кустарников. Инструмент небольшого размера, благодаря чему его удобно хранить и работать среди плотно растущих веток.</description>
  21.         <barcode>8404880771159</barcode>
  22.         <param name="Тип">Сучкорез</param>
  23.         <param name="Упаковка">Без упаковки</param>
  24.         <param name="Год выпуска">2013</param>
  25.       </offer>
  26. ......
  27.  


Суть проблемы не видит теги с атрибутами

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         <param name="Тип">Сучкорез</param>
  3.         <param name="Упаковка">Без упаковки</param>
  4.         <param name="Год выпуска">2013</param>
  5.  


с латинскими названиями все работает
(Добавление)
тема закрыта

(Отредактировано автором: 29 Октября, 2013 - 15:38:48)

 
 Top
Мелкий Супермодератор
Отправлено: 29 Октября, 2013 - 15:54:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




and_07 пишет:
encoding="windows-1251"

А скрипт у вас в какой кодировке?
simplexml для PHP всегда отдаёт UTF8, самостоятельно производя конвертацию.


-----
PostgreSQL DBA
 
 Top
and_07
Отправлено: 29 Октября, 2013 - 15:56:56
Post Id


Гость


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB