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]   

> Описание: подскажите, может быть несложным примером.
I_CaR
Отправлено: 08 Августа, 2012 - 08:52:04
Post Id



Новичок


Покинул форум
Сообщений всего: 62
Дата рег-ции: Март 2011  
Откуда: Красноярск


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




Доброго всем
Совсем застрял.... (да и с получением данных через XML(в кириллице) впервые столкнулся)
Есть примерно такого вида XML:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. <сообщение>
  4. <параметры>
  5.   <каталог id="10" имя_каталога="Каталог 1">
  6.     <наименование наименование_товара="Товар 1"/>
  7.     <описание текст="текст о товаре 1"/>
  8.     <цены цена_1="95" цена_2="100" цена_3="90"/>
  9.   </каталог>
  10.   <каталог id="20" имя_каталога="Каталог 2">
  11.     <наименование наименование_товара="Товар 2"/>
  12.     <описание текст="текст о товаре 1"/>
  13.     <цены цена_1="195" цена_2="200" цена_3="190"/>
  14.   </каталог>
  15. </параметры>
  16. </сообщение>
  17.  


Пробовал напримере с XML на латинице получать в переменные PHP данные так:
PHP:
скопировать код в буфер обмена
  1.  
  2.  header('Content-type: text/html; charset=windows-1251');
  3.  $xml = simplexml_load_file('XML/data.xml');
  4.  
  5.  foreach ($xml->parametr as $parametr)
  6.  {
  7.           foreach ($parametr->catalogue as $catalogue)
  8.           {
  9.  
  10.                  print ($catalogue[catalogname]);                
  11.  
  12.  
  13.                  print ($catalogue[id]);
  14.                  print ($catalogue->name[tovname]);
  15.                  // или так тоже можно: print ($catalogue->{name}["tovname"]);
  16.                  print ($catalogue->price[internet]);
  17.                  print ($catalogue->text[tovtext]);
  18.           }
  19.  }
  20.  


С латинской разметкой понятно, а как быть с кириллическим XML,
что бы в PHP получить нечто такого:
print (${каталог}->{"наименование"}["наименование_товара"]);

Всё что советовали приходилось в один текстовый массив.
Из него данные тоже не смог выдернуть, приходил NULL.

Мне просто нужно получить данные типа:
a:=каталог_01;
b:=товар_01
c:=цена_01
...
а1:=каталог_X
b1:=товар_0X
...
и так далее, а дальше, из допустим, каталогов_X, я соберу массив. И буду оперировать данными от туда уже по назначению.

Или может я вообще не так представляю картину передачи данных из XML в PHP и далее в БД?
Третий день топчусь на месте (только из-за кириллицы).
(Добавление)
Почитал :
хороший, понятный мануал
Даже вопросов не возникло, вроде более-менее доступно для понимания.
Но там ни слово про то, если XML в кириллическом формате тегов.
пример из мануала "echo $movies->movie->{'great-lines'}->line;"
вот как он должен выглядеть на кириллице?
выходит, что как-то вот так? "print $фильмы->кино->..." Но ведь переменные должны иметь имя в латинице!

(Отредактировано автором: 08 Августа, 2012 - 13:02:52)

 
 Top
EuGen Администратор
Отправлено: 08 Августа, 2012 - 11:01:44
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Есть своего рода "трюк" для преобразования объекта в массив. Требует json-модуля, правда. И работает с utf-8 (соответственно, Вам нужно будет сконвертировать Ваш xml в utf-8).
Например:
PHP:
скопировать код в буфер обмена
  1. //working with utf-8
  2. $sXml='<сообщение>
  3. <параметры>
  4.  <каталог id="10" имя_каталога="Каталог 1">
  5.    <наименование наименование_товара="Товар 1"/>
  6.    <описание текст="текст о товаре 1"/>
  7.    <цены цена_1="95" цена_2="100" цена_3="90"/>
  8.  </каталог>
  9.  <каталог id="20" имя_каталога="Каталог 2">
  10.    <наименование наименование_товара="Товар 2"/>
  11.    <описание текст="текст о товаре 1"/>
  12.    <цены цена_1="195" цена_2="200" цена_3="190"/>
  13.  </каталог>
  14. </параметры>
  15. </сообщение>';
  16. //got an array here:
  17. //var_dump($rgXml);

- получите массив с корректными значениями ключей, соответственно, работать с ним уже не составит труда.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2012 - 11:13:15
Post Id



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


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


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





? Беглым просмотром результат идентичен.

I_CaR пишет:
Но ведь переменные должны иметь имя в латинице!

Это только хороший тон, а синтаксически корректны и работоспособны.
http://nl3.php.net/manual/en/lan...ables.basics.php
По доступу к атрибутам ответил в другой вашей теме.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 08 Августа, 2012 - 11:15:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Мелкий
Вовсе нет. Если массив будет многомерным, то предложенный Вами (array) приведет к скалярному (то есть, по факту - строковому) виду только корневое измерение массива, тогда как остальное так и останется в виде SimpleXMLElement-объектов.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2012 - 11:16:09
Post Id



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


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


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




EuGen, точно. Проглядел.


-----
PostgreSQL DBA
 
 Top
I_CaR
Отправлено: 09 Августа, 2012 - 06:33:06
Post Id



Новичок


Покинул форум
Сообщений всего: 62
Дата рег-ции: Март 2011  
Откуда: Красноярск


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




Всё! Задачу решил! Не только указанием кодировки XML в коде "header('...charset...)", но и + перекодировки самого PHP. (и это ещё только локально, что ещё ждёт на серваке у хостера не известно...)
Вот блин кириллица, и кто её продвигает?
 
 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