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
Отправлено: 06 Августа, 2012 - 08:46:36
Post Id



Новичок


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


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




Доброго всем здравия.
Вот возникла необходимость заносить в БД данные вытягивая их из XML.
взялся пробовать с простого.
пример XML:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <messages>
  4.  <info id="10">
  5.  <name>имя</name>
  6.  <text>текст</text>
  7.  </info>
  8. </messages>
  9.  


Тут всё понятно.
Далее PHP-обработчик
PHP:
скопировать код в буфер обмена
  1.  
  2.  header('Content-type: text/html; charset=utf-8');
  3.  $xml = simplexml_load_file('XML/data.xml');
  4.  foreach ($xml->info as $info)
  5.  {
  6.  print ("id=");
  7.  print ($info[id]);
  8.  print ("<br>");
  9.  print ("name=");
  10.  print ($info->name);
  11.  print ("<br>");
  12.  print ("text=");
  13.  print ($info->text);
  14.  print ("<hr>");
  15.  
  16.  }
  17.  


Но это пример, а в реальности пришлось увидеть XML-файл (родом из 1С) с название элементов на русском. Пример:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <КоммерческаяИнформация>
  3.         <Каталог Идентификатор="XXXXXXX" Наименование="Тузики" Владелец="yyyyyy" Единица="шт">
  4.                 <Свойство Идентификатор="Комментарий" Наименование="Дополнительная информация"/>
  5.                 <Свойство Идентификатор="ПолноеНаименование" Наименование="Полное наименование"/>
  6.                
  7.                 <Товар Идентификатор="aaaaaa" ИдентификаторВКаталоге="aaaaaa" Наименование="Тузик с хвостом" Родитель="bbbbbb" Единица="шт">
  8.                 <ЗначениеСвойства ИдентификаторКаталога="cccccc" ИдентификаторСвойства="ПолноеНаименование" Значение="Тузик с хвостом"/>
  9.                 </Товар>
  10.                
  11.                 <Группа Идентификатор="внук" ИдентификаторВКаталоге="внук" Наименование="Собаки" Родитель="сын"/>
  12.                 <Группа Идентификатор="сын" ИдентификаторВКаталоге="сын" Наименование="Тузики" Родитель="родитель"/>
  13.                 <Группа Идентификатор="родитель" ИдентификаторВКаталоге="родитель" Наименование="без документов"/>
  14.         </Каталог>
  15. </КоммерческаяИнформация>
  16.  


Как в таком случае получить данные из XML. Подскажите, как начать.

(Отредактировано автором: 06 Августа, 2012 - 08:49:59)

 
 Top
Panoptik
Отправлено: 06 Августа, 2012 - 08:53:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




foreach попробуйте


-----
Just do it
 
 Top
I_CaR
Отправлено: 06 Августа, 2012 - 09:36:51
Post Id



Новичок


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


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




Panoptik пишет:
foreach попробуйте

А в моём примере разве
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach ($xml->info as $info)
это не то?

В первом примере вывод:
print ($info[id]);

А как во втором это реализовать?
ведь:
print ($Каталог Идентификатор->Свойство Идентификатор);
Как эти названия параметров на кириллице, преобразовать в латинские?
Или я вообще не в том направлении рою?
Уточню - файл стандарта CommerceML

(Отредактировано автором: 06 Августа, 2012 - 10:35:31)

 
 Top
LIME
Отправлено: 06 Августа, 2012 - 09:38:49
Post Id


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


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


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




PHP:
скопировать код в буфер обмена
  1. foreach ($xml as $info){
  2.     foreach ($info as $item){
  3.        // ....
  4.     }
  5. }
 
 Top
I_CaR
Отправлено: 06 Августа, 2012 - 11:07:09
Post Id



Новичок


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


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




С наименованиями параметров на латинском понятно.
C родителями и дочками тоже понятно (принимаются через foreach).
Я сделал, данные получаю.

Но вот, как тогда, быть с таким вот XML (и он именно на кириллице!):
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <информация>
  4.  
  5.  <каталог id="10">
  6.  <наименование>штучка</наименование>
  7.  <описание>очень нужная штучка</описание>
  8.  </каталог>
  9.  
  10. </информация>


Вот тут я стопорнулся, не могу ни как сообразить, как эти параметры принять в PHP.

(Отредактировано автором: 06 Августа, 2012 - 11:09:24)

 
 Top
Мелкий Супермодератор
Отправлено: 06 Августа, 2012 - 11:12:38
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. simplexml_load_string($xml)->{'каталог'}->{'описание'}

В общем-то, даже


Само собой, только если скрипт в UTF8


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



Новичок


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


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




попробовал. выдаёт ошибку, как раз по строке 5 :
"Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 4: parser error : Start tag expected, '<' not found in Z:\........\xml_4.php on line 5"
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  header('Content-type: text/html; charset=utf-8');
  3.  
  4.  $xml = simplexml_load_file('XML/file.xml');
  5.  simplexml_load_string($xml)->{'каталог'}->{'описание'};
  6.  
  7.  foreach ($xml->каталог as $catalogue)
  8.  {
  9. ....
  10. }



Такой вот подход тоже не подошёл.
PHP:
скопировать код в буфер обмена
  1.  
  2. ...
  3. foreach ($parametr->{'каталог'} as $catalog)
  4. ...
  5.  


P.S.
Вот если есть код
print ($catalogue->name);
в XML меняю параметр name на наименование
то как его получить исходя из print ($catalogue->name);?
получается, что print ($catalogue->{'наименование'});
Но так данные с этого параметра не приходят.

(Отредактировано автором: 06 Августа, 2012 - 15:00:40)

 
 Top
I_CaR
Отправлено: 07 Августа, 2012 - 06:36:13
Post Id



Новичок


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


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




Тишина...
Неужели ни кто с рускоязычным XML не работает?
 
 Top
Мелкий Супермодератор
Отправлено: 07 Августа, 2012 - 08:41:11
Post Id



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


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


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




Вы хоть почитайте, что такое simplexml_load_string.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 07 Августа, 2012 - 09:08:18
Post Id



Постоянный участник


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $xml =
  3. '<КоммерческаяИнформация>
  4.        <Каталог Идентификатор="ntrcn" Наименование="Тузики" Владелец="yyyyyy" Единица="шт">
  5.                <Свойство Идентификатор="Комментарий" Наименование="Дополнительная информация"/>
  6.                <Свойство Идентификатор="ПолноеНаименование" Наименование="Полное наименование"/>
  7.              
  8.                <Товар Идентификатор="aaaaaa" ИдентификаторВКаталоге="aaaaaa" Наименование="Тузик с хвостом" Родитель="bbbbbb" Единица="шт">
  9.                <ЗначениеСвойства ИдентификаторКаталога="cccccc" ИдентификаторСвойства="ПолноеНаименование" Значение="Тузик с хвостом"/>
  10.                </Товар>
  11.              
  12.                <Группа Идентификатор="внук" ИдентификаторВКаталоге="внук" Наименование="Собаки" Родитель="сын"/>
  13.                <Группа Идентификатор="сын" ИдентификаторВКаталоге="сын" Наименование="Тузики" Родитель="родитель"/>
  14.                <Группа Идентификатор="родитель" ИдентификаторВКаталоге="родитель" Наименование="без документов"/>
  15.        </Каталог>
  16. </КоммерческаяИнформация>';
  17. $xmlData = simplexml_load_string($xml);
  18. var_dump($xmlData->asXML());
  19. var_dump($xmlData->{'Каталог'}->attributes());

как не странно но все замечательно обрабатывается
 
 Top
I_CaR
Отправлено: 08 Августа, 2012 - 06:05:39
Post Id



Новичок


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


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




Вы меня простите за недопонимание, но с передачей параметров через XML, я столкнулся впервые.
Попробовал:
var_dump($xml->{'Каталог'}->attributes('Единица'));
здесь выходит ошибка - "var_dump() [function.var-dump]: Node no longer exists in [путь\файл].php on line 10
object(SimpleXMLElement)#3 (0) { }"
и так:
var_dump($xml->{'Каталог'}->{'Единица'});
здесь получаю NULL
----------------
это XML:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. <messages>
  4.    <parametr>
  5.        <catalogue id="10" catalogname="Каталог 1">
  6.        <name tovname="Товар 1"/>
  7.        <text tovtext="текст о товаре 1"/>
  8.        <price internet="95" rozn="100" opt="90"/>
  9.        </catalogue>
  10.    </parametr>
  11. </messages>
  12.  

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

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

 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2012 - 09:41:59
Post Id



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


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


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




Метод attributes принимает namespace, а не имя желаемого параметра в качестве аргумента.

PHP:
скопировать код в буфер обмена
  1. $xml->{'Каталог'}->attributes()->{'Единица'}


Так же мне очень любопытно, нафига вы высылаете заголовок с кодировкой cp1251, хотя работаете априори в UTF8? Повторюсь, вы работаете именно в UTF8 - SimpleXML представляет интерфейс только в UTF8, вне зависимости от кодировки исходного документа (т.к. сам делает iconv, если надо).


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



Новичок


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


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




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

(Отредактировано автором: 09 Августа, 2012 - 10:41:13)

 
 Top
I_CaR
Отправлено: 10 Августа, 2012 - 06:01:00
Post Id



Новичок


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


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




Мелкий пишет:

Цитата:
PHP:
скопировать код в буфер обмена
  1. simplexml_load_string($xml)->{'каталог'}->{'описание'}
  2.  

В общем-то, даже


Само собой, только если скрипт в UTF8

utf8 Блин! Как же дорога эта кодировочка.
Спасибо! Мелкий, я просто упустил из виду последнюю твою строку! Блин! Не хватает внимательности!

(Отредактировано автором: 10 Августа, 2012 - 06:15:03)

 
 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