Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выпадающее меню с использованием XML 
:(
    Опции темы
SneG0K
Дата 5.8.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Есть такой XML:
Код

<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <cat id="0" link="#" title="О компании">
        <sub id="0" link="#" title="Ссылка1">
        <sub id="1" link="#" title="Ссылка1">
    </cat>
    <cat id="1" link="#" title="Наши бренды">
        <sub id="0" link="#" title="Ссылка1">
        <sub id="1" link="#" title="Ссылка1">
    </cat>
</menu>


Есть функция преобразующая этот XML в это массив:
Код

Array
(
    [0] => Array
        (
            [title] => О компании 
            [link] => #
            [body] => Array
                (
                    [0] => Array
                        (
                            [title] => Ссылка 1
                            [link] => #
                        )

                    [1] => Array
                        (
                            [title] => Ссылка 2
                            [link] => #
                        )

                )

        )

    [1] => Array
        (
            [title] => Наши бренды
            [link] => #
            [body] => Array
                (
                    [0] => Array
                        (
                            [title] => Ссылка 1
                            [link] => #
                        )

                    [1] => Array
                        (
                            [title] => Ссылка 2
                            [link] => #
                        )

                )

        )

)


На сколько правильно составлен XML файл? Я просто первый раз пользуюсь XML

Добавлено через 3 минуты
И еще вопросик, чем парсить XML? 
Просто меня интересует то, что есть на всех хостингах, чтоб не пришлось потом заказчику объяснять, что да как.
PM WWW Skype   Вверх
icewind
Дата 5.8.2009, 14:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Нормально составлен. 
Единственное что, это неплохо было бы закрыть одиночные тэги 
Код

<sub id="0" link="#" title="Ссылка1" />


Цитата

И еще вопросик, чем парсить XML? 

Я обычно пользуюсь SimpleXML или DOM(реже)

Это сообщение отредактировал(а) icewind - 5.8.2009, 14:07


--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 5.8.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(icewind @  5.8.2009,  13:02 Найти цитируемый пост)
Я обычно пользуюсь SimpleXML или DOM(реже)

А наличие их на хостингах?
PM WWW Skype   Вверх
icewind
Дата 5.8.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



За наличие на абсолютно всех хостингах думаю никто не поручится, но встречаются достаточно часто... В конце концов есть и некрохосты с 4пхп, но на них я не ориентируюсь.

Про отсутствие парсера и выход из ситуации есть статья на хабре

Это сообщение отредактировал(а) icewind - 5.8.2009, 14:19


--------------------
user posted image
PM MAIL Skype   Вверх
lukas
Дата 5.8.2009, 15:39 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



SneG0K

SimpleXML встречается практически на всех хостингах где стоит php 5, это вообще расширение поставляется вместе с php начиная с 5ой версии.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
SneG0K
Дата 5.8.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Код

<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <cat id="0" link="#" title="О компании">
        <sub id="0" link="#" title="Ссылка1" />
        <sub id="1" link="#" title="Ссылка1" />
    </cat>
    <cat id="1" link="#" title="Наши бренды">
        <sub id="0" link="#" title="Ссылка1" />
        <sub id="1" link="#" title="Ссылка1" />
    </cat>
</menu>

Вот на это ругается simpleXML
Код


Warning: simplexml_load_file() [function.simplexml-load-file]: core/includes/menu.xml:3: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xCE 0x20 0xEA 0xEE in \www\core\functions\functions.php on line 14

Warning: simplexml_load_file() [function.simplexml-load-file]: <cat id="0" link="#" title="О компании"> in \www\core\functions\functions.php on line 14

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in \www\core\functions\functions.php on line 14


Что делать?

Это сообщение отредактировал(а) SneG0K - 5.8.2009, 21:40
PM WWW Skype   Вверх
icewind
Дата 6.8.2009, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



А файл с xml действительно в utf8? Если в файле указана кодировка utf-8, то и сами данные должны быть в этой кодировке. Я у себя на локальном сервере проверил и все отпарсилось без проблем.


--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 6.8.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Да, сохранил сам файл в utf-8 вроде заработало, но
Код

О компании
Куда дальше копать?

Добавлено через 8 минут и 46 секунд
И еще, как получить доступ к атрибуту?
Код

object(SimpleXMLElement)#7 (2) {
  ["@attributes"]=>
  array(3) {
    ["id"]=>
    string(1) "0"
    ["link"]=>
    string(1) "#"
    ["title"]=>
    string(19) "Рћ компании"
  }
  ["sub"]=>
  array(2) {
    [0]=>
    object(SimpleXMLElement)#8 (1) {
      ["@attributes"]=>
      array(3) {
        ["id"]=>
        string(1) "0"
        ["link"]=>
        string(1) "#"
        ["title"]=>
        string(14) "Ссылка 1"
      }
    }
    [1]=>
    object(SimpleXMLElement)#9 (1) {
      ["@attributes"]=>
      array(3) {
        ["id"]=>
        string(1) "1"
        ["link"]=>
        string(1) "#"
        ["title"]=>
        string(3) "132"
      }
    }
  }
}


Код

$menu[]['title'] = $cats->attributes->title;


PM WWW Skype   Вверх
icewind
Дата 6.8.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Вывод данных тоже должен быть в urf8. И, желательно, сам скрипт. Можно послать заголовок перед выводом
 
Код

header('Content-Type: text/html; charset=utf-8'); 



Цитата(SneG0K @  6.8.2009,  09:05 Найти цитируемый пост)
И еще, как получить доступ к атрибуту?

Код
    
echo $cats->attributes()->title;



--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 6.8.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Код

Array
(
    [0] => Array
        (
            [title] => SimpleXMLElement Object
                (
                    [0] => Рћ компании
                )

            [link] => SimpleXMLElement Object
                (
                    [0] => #
                )

            [id] => SimpleXMLElement Object
                (
                    [0] => 0
                )

        )

    [1] => Array
        (
            [title] => SimpleXMLElement Object
                (
                    [0] => Р•ще что-то
                )

            [link] => SimpleXMLElement Object
                (
                    [0] => #
                )

            [id] => SimpleXMLElement Object
                (
                    [0] => 1
                )

        )

)


Получается такой массив. Но как именно получить доступ к содержимому атрибута, а не к объекту?
PM WWW Skype   Вверх
icewind
Дата 6.8.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Пара примеров по получению атрибутов. ( в файле test.xml лежит исходный xml документ )

Код

$xml = simplexml_load_file('test.xml');

foreach( $xml->cat[0]->attributes() as $name => $val )
{
   echo "Attribute " . $name . " = " . $val . "<br />";
}

$title = (string)$xml->cat[0]->attributes()->title;

echo $title;
 

Для того чтоб получить не экземпляр класса SimpleXMLObject, а значение, нужно привести его к строке выполнив конкатенацию или указав тип явно.

Это сообщение отредактировал(а) icewind - 6.8.2009, 14:23


--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 6.8.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



А можно ли как-нить использовать кодировку windows-1251 и русские символы в XML файле? А то у меня такая путаница с кодировками теперь.
PM WWW Skype   Вверх
icewind
Дата 6.8.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Сохранить xml можно в windows-1251 и указать кодировку
Код

<?xml version="1.0" encoding="windows-1251"?>

но после парсинга SimpleXML все равно вернет данные в кодировке utf-8


--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 7.8.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Тоесть мне в любом случае нужно будет отослать хидер с кодировкой utf-8?
PM WWW Skype   Вверх
icewind
Дата 7.8.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Ну тут либо отдавать реальный утф вместе с хидером, либо уже все делать в windows-1251
Код

$title = iconv("UTF-8", "windows-1251", (string)$xml->cat[0]->attributes()->title);



--------------------
user posted image
PM MAIL Skype   Вверх
SneG0K
Дата 7.8.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



icewind, да нет, это довольно муторный вариант, лучше уж буду тогда разруливать все в utf-8
PM WWW Skype   Вверх
bars80080
Дата 7.8.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а как по массиву видно какие имена тэгов?
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1221 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.