Сегодня: 21:11:2024 Доброго вам дня!

I live ExBB and CMS Limbo!  I live ExBB and CMS Limbo!
Логин :
Пароль :
Регистрация?  Забыли пароль? 
 


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

> Описание: Описание функции и их использование...

  Супермодератор
Отправлено: 8 ноября 2012 — 14:24
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Работа с XML данными

Тут я буду разбираться с функциями, которые используются при работе с XML данными. Некоторые вещи объяснить будет сложно, а потому мне проще отталкиваться от конкретного примера. Не зная теории я буду использовать принцип черного ящика - подавать на вход данные и смотреть что получаю на выходе. Код буду обрамлять тегами Code, а данные вообще прятать под Spoiler ввиду большого размера...

Итак имеем на входе файл

Спойлер (Показать)

Создаем объект класса MiniXMLDoc. Через этот объект и будем оперировать данными
Следующей командой читаем в переменную $xml_data содержимое файла
code:
$xml = new MiniXMLDoc();
$xml_data=get_url('http://limbo/updates.xml');
 
 Top

  Супермодератор
Отправлено: 8 ноября 2012 — 14:42
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Заполняем структуру объекта $xml данными из переменной $xml_data
По сути заполняем структуру данными из файла updates.xml.

code:
$xml->fromString($xml_data);

Спойлер (Показать)
 
 Top

  Супермодератор
Отправлено: 8 ноября 2012 — 15:04
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Создаем в переменной $table_req вспомогательный массив, содержащий список элементов, которые мы хотели бы получить.
Другими словами в этом массиве перечисляем поля структуры, данные из которых нам нужно прочитать.

code:
$table_req = array (
'id'=>'id','name'=>'name','link'=>'link','published'=>'published','author'=>'author',
'version'=>'version','date'=>'date','authorEmail'=>'authorEmail','size'=>'size');
 
 Top

  Супермодератор
Отправлено: 8 ноября 2012 — 15:24
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Сохраняем в переменной $table_data результат функции read_updates_xml
Эта функция получает данные из объекта $xml, ищет там категорию components и в этой категории ищет данные согласно списка, определенного в архиве $table_req

code:
$table_data = read_updates_xml($xml,'components',$table_req );

Спойлер (Показать)
 
 Top

  Супермодератор
Отправлено: 9 ноября 2012 — 00:08
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Разбираем функцию read_updates_xml

Переменной $update_element присваиваем результат метода $xml->getElementByPath($path)
Этот метод ищет в объекте $xml секцию согласно адреса, указанного в параметре. В качестве параметра может быть имя секции, или конструкция разделённая слешем и описывающая родственные связи (раздел/подраздел и т.д.)
code:
$update_element = $xml->getElementByPath($path);

В случае, когда переменная $path = 'components' имеем ответ

Спойлер (Показать)
 
 Top

  Супермодератор
Отправлено: 9 ноября 2012 — 00:45
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Присваиваем переменной $items результат метода $update_element->getAllChildren()
Этот метод возвращает список всех дочерних элементов объекта.

code:
$items = $update_element->getAllChildren();


В случае, когда $update_element получено при $path = 'components' имеем ответ

Спойлер (Показать)
 
 Top

  Супермодератор
Отправлено: 9 ноября 2012 — 13:01
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Следующий код перебирает содержимое дочерних элементов
Там применяется метод getValue(), который получает всё текстовое содержимое отсекая все теги.
code:
foreach($items as $item)
{
$tinfo=false;
foreach($req as $var=>$val)
{
$obj = $item->getElementByPath($val);
if($obj)
{$tinfo[$var]=$obj->getValue();}
else
{$tinfo[$var]='';}
}
$info[]=$tinfo;
print_r( $tinfo ); ?><br /><br /><? ;
}
}
return $info;


Спойлер (Показать)
 
 Top

  Супермодератор
Отправлено: 15 ноября 2012 — 00:12
Post Id


 Покинул технарь
Профессионал
Сообщений: 1825
Регистрация: 12.2011

Наткнулся на интересную конструкцию...

code:
$xmlDoc = new MiniXMLDoc();
$xmlDoc->fromFile($this->install_dir . $p_file);
$islosinstall = &$xmlDoc->getElementByPath('mosinstall');

Похоже есть функция непосредственного чтения xml файла - fromFile
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Limbo CMS »


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

> Темы, похожие на тему "Работа в Limbo с XML данными"
Темы Форум Информация о теме Обновление
Skype end Denwer
Скайп мешает нормальной работе Денвера
Limbo CMS Ответов: 0
Автор темы: технарь
8 января 2012 — 08:00
Автор: технарь
Пару слов по поводу устройства навигации
Limbo CMS Ответов: 0
Автор темы: технарь
29 апреля 2012 — 17:12
Автор: технарь
Решение проблемы с русской кодировкой в xml файлах
Limbo CMS Ответов: 0
Автор темы: технарь
6 октября 2013 — 15:23
Автор: технарь
 


Powered by ExBB v1.1.180311