Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.211.66] |
|
Сообщ.
#1
,
|
|
|
Помогите, нужно прочитать XML файл в массив, структура такая:
1) Попроще <?xml version="1.0" encoding="UTF-8"?> <operator> <item>UMC</item> <item>O2</item> <item>Beeline</item> </operator> Нужно сделать массив item. Я смог сделать псевдо-парсер, для случая когда каждый тэг в еденичном числе, а когда их много? 2) Сложнее <?xml version="1.0" encoding="UTF-8"?> <england> <item>London</item> <item>Chelsea</item> </england> <france> <item>Paris</item> <item>Tylysa</item> </france> Нужно сделать ассоциативный массив страна=>город. Помогите плиз |
Сообщ.
#2
,
|
|
|
В PHP имеются достаточно хорошие встроенные средства (XMLDOM, PEAR::XML для PHP4, родные функции обработки XML в PHP 5) — они просто _очень_ хорошо описаны на сайте php.net, так вот, просьба ознакомиться и использовать в дальнейшем.
|
Сообщ.
#3
,
|
|
|
А кто то реально может помочь, а не давать ссылки на мануалы? Там разбиратся не одну неделю.
|
Сообщ.
#4
,
|
|
|
Используй miniXML - один из самых простых и быстрых разборщиков XML.
Функционал позволяет получать DOM-дерево, а затем и обходить его. PS: никто не будет тратить свое время и выкладывать готовое решение - гораздо эфективнее Вам будет разобраться самому (тем более с miniXML это отнимает у Вас от силы час). На сайте описаны все методы. Если что не будет понятно, спрашивайте здесь - обязательно помогут. Добавлено У Вас не совсем правильно построена структура документа. Вернее будет сделать так: <?xml version="1.0" encoding="UTF-8"?> <list> <england> <item>London</item> <item>Chelsea</item> </england> <france> <item>Paris</item> <item>Tylysa</item> </france> </list> Весь смысл в получении корня xml-документа (list), который является объектом класса MiniXMLElement, у которого, в свою очередь, имеются потомки, которые можно получить через getAllChildren(). Устроя цикл, вроде: $xml = new MiniXMLDoc(); $xml->fromFile(''); // или $xml->fromString(''); $root = $xml->getRoot('list'); if ($root) { $children = $root->getAllChildren(); if (sizeof($children) > 0) { foreach ($children as $child) { // $child - тоже объект класса MiniXMLElement .... } } } Еще одним решением может стать изменение структуры xml-документа: <list> <country name='england'> ..... </country> <country name='france'> ..... </country> </list> Тогда обработать такой универсализированный документ гораздо проще |
Сообщ.
#5
,
|
|
|
Цитата Суть Зла @ Да, думаю так лучше будет ще одним решением может стать изменение структуры xml-документа: Спасибо, посмотрю. Добавлено Вроде все нормально, но появился вопрос, вот такая структура xml документа: <?xml version="1.0" encoding="UTF-8"?> <list> <operator> <item>O2</item> </operator> <operator> <item>Alltel</item> </operator> <operator> <item>Sprint</item> </operator> </list> Код такой, как в примере: <?php header('Content-type: text/plain'); require_once('minixml.inc.php'); $xmlDoc = new MiniXMLDoc(); $xmlDoc->fromFile('./product.xml'); print_r($xmlDoc->toArray()); ?> Выдает чего то такой результат: Array ( [list] => Array ( [operator] => Array ( [0] => Array ( [item] => O2 ) [1] => Array ( [item] => Alltel ) [_num] => 3 - откуда это берется??? [2] => Array ( [item] => Sprint ) ) ) ) В чем может быть проблема? |
Сообщ.
#6
,
|
|
|
А тот код xml, что Вы предоставили - это и есть product.xml?
Попробуйте посмотерть, что возвращается Вам в файле - возможно, следует открыть файл xml через file() и считать его построчно - какое содержание будет на выходе. Хотя еще лучше будет залезть в метод fromFile библиотеки miniXML и постараться достать получаемый код скриптом оттуда. Добавлено Настоятельно реккомендую сделать для отладки так: 1) открывать файл через file() 2) скачивать его содержимое построчно в переменную $str, 3) открывать структуру не через fromFile(), а через fromString($str) Увидим, есть ли различие. |
Сообщ.
#7
,
|
|
|
Все равно появляется та хрень, уже делаю так:
<? header('Content-type: text/plain'); require_once('minixml.inc.php'); $xmlDoc = new MiniXMLDoc(); $str = implode('', file('./product.xml')); $xmlDoc->fromString($str); print_r($xmlDoc->toArray()); ?> |
Сообщ.
#8
,
|
|
|
А что в $str?
|