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

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

1. plazmagod - 31 Мая, 2011 - 09:05:13 - перейти к сообщению
Нужно сформировать XML-файл. Формирую строку, пытаюсь грузить функцией simple_load_string - в переменной пусто. SimpleXML подключен, PHP5.

CODE (htmlphp):
скопировать код в буфер обмена
  1. $xml = simplexml_load_string('<books>
  2.      <book>
  3.        <title>Название книги</title>
  4.        <author>Имя и фамилия автора</author>
  5.        <pages>Количество страниц</pages>
  6.        <isbn>ISBN</isbn>
  7.        <year>Год издания</year>
  8.      </book>
  9.    </books>');
  10. var_dump($xml);


Результат: bool(false)

Во всех подсказках есть рекомендации использовать следующий синтаксис:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $string =<<<XML
  2.   <books>
  3.      <book>
  4.        <title>Название книги</title>
  5.        <author>Имя и фамилия автора</author>
  6.        <pages>Количество страниц</pages>
  7.        <isbn>ISBN</isbn>
  8.        <year>Год издания</year>
  9.      </book>
  10.    </books>
  11.    XML;
  12.  
  13. $xml = simplexml_load_string($string);
  14. var_dump($xml);


Этот вариант у меня вообще не катит. В NPP подсветка слетает, всё что после потока оказывается как бы закомментировано, интерпретатор не понимает.
2. EuGen - 31 Мая, 2011 - 09:14:54 - перейти к сообщению
Естественно false.
Где в Вашем примере объявление xml? Например, такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
3. plazmagod - 31 Мая, 2011 - 09:25:38 - перейти к сообщению
Сделал так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $xml = simplexml_load_string('
  2. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  3. <books>
  4.      <book>
  5.        <title>Название книги</title>
  6.        <author>Имя и фамилия автора</author>
  7.        <pages>Количество страниц</pages>
  8.        <isbn>ISBN</isbn>
  9.        <year>Год издания</year>
  10.      </book>
  11.    </books>');
  12. var_dump($xml);


Эффект тот же.
4. EuGen - 31 Мая, 2011 - 09:32:54 - перейти к сообщению
Ну потому что стандарт неплохо бы почитать. Перенос строки недопустим вначале.
Делайте так:
PHP:
скопировать код в буфер обмена
  1. $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <books>
  3.      <book>
  4.        <title>Название книги</title>
  5.        <author>Имя и фамилия автора</author>
  6.        <pages>Количество страниц</pages>
  7.        <isbn>ISBN</isbn>
  8.        <year>Год издания</year>
  9.      </book>
  10.    </books>');
  11. var_dump($xml);
5. plazmagod - 31 Мая, 2011 - 09:38:55 - перейти к сообщению
Сделал. То же.
6. EuGen - 31 Мая, 2011 - 09:39:31 - перейти к сообщению
Значит, не то же так как у меня отрабатывает корректно.
PHP 5.2
7. plazmagod - 31 Мая, 2011 - 09:48:15 - перейти к сообщению
Показал warning, ругается на кодировку. NPP по умолчанию в ANSI сохранял, конвертнул в UTF-8 - заработало.

Чтоб работало в ANSI xml-определение сменил на <?xml version="1.0" encoding="CP1251" standalone="yes"?>

Спасибо.
(Добавление)
Ещё вопрос. Вот так у Вас работает?
CODE (htmlphp):
скопировать код в буфер обмена
  1. $string =<<<XML<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
  2.    <books>
  3.      <book>
  4.        <title>Название книги</title>
  5.        <author>Имя и фамилия автора</author>
  6.        <pages>Количество страниц</pages>
  7.        <isbn>ISBN</isbn>
  8.        <year>Год издания</year>
  9.      </book>
  10.    </books>
  11.    XML;
  12.  
  13. $xml = simplexml_load_string($string);
  14. var_dump($xml);
8. Screwdry - 01 Марта, 2012 - 13:58:03 - перейти к сообщению
XML может быть только UTF-8.

Для перекодировки из UTF-8 в windows-1251, после разбора XML, используй

CODE (htmlphp):
скопировать код в буфер обмена
  1. mb_convert_encoding($string,"windows-1251","UTF-8");

 

Powered by ExBB FM 1.0 RC1