Есть такой код: PHP: <?php $url = 'http://ws.darkagesworld.com/info.asmx/GetCastleInfo?rnd='.md5(uniqid('')); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "$url"); // Destination URL curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Output to a variable $results = curl_exec($ch); $XML = iconv('UTF-8','cp1251',$results); $news = array(); // В этом массиве будут храниться новости, // полученные из XML файла $currentNews = null; // Текущая новость. Используется в процессе // импорта данных $index = null; // Текущий индекс в массиве новостей. // Используется в процессе импорта данных // Функции, описанные ниже, являются обработчиками различных типов // XML-данных и будут вызываться парсером в процессе разбора. // Функция для обработки начальных тегов XML // На входе: // - указатель на SAX парсер // - имя XML тега // - массив аттрибутов function saxStartElement($parser,$name,$attrs) { global $currentNews,$index; switch($name) { case 'CastleResult': // Тег newsLine содержит все новости. Мы должны подготовить // массив $news для приема новостей из XML файла. $news = array(); break; case 'CastleInfo': // Каждая новость находится в теге news. Подготавливаем массив // $currentNews для приема этой новости $currentNews = array(); // Если у новости есть дата - сохраняем ее в массиве if (in_array('date',array_keys($attrs))) $currentNews['date'] = $attrs['date']; break; default: // Все остальные теги, которые могут встретиться в XML файле // находятся внутри тега <news>, поэтому мы просто запоминаем // их название с тем, чтобы знать, какие именно данные мы // обрабатываем. $index = $name; break; }; } // Функция для обработки конечных тегов XML // На входе: // - указатель на SAX парсер // - имя XML тега function saxEndElement($parser,$name) { global $news,$currentNews,$index; if ((is_array($currentNews)) && ($name=='CastleInfo')) // Если в данный момент у нас есть массив $currentNews (т.е. // мы обрабатываем содержимое новости) и имя закрывающего // тега - "news", то это значит, что данные для этой новости // кончились и мы можем поместить готовую новость в массив // новостей. { $news[] = $currentNews; // Уничтожаем массив текущей новости, чтобы показать, что // в данный момент мы не занимаемся получением данных для // новости. $currentNews = null; }; // В любом случае закрытие тега означает, что символьные // данные, получаемые парсером не нужно помещать куда-либо. $index = null; } // Функция для обработки символьных данных // На входе: // - указатель на SAX парсер // - символьные данные XML function saxCharacterData($parser,$data) { global $currentNews,$index; // Мы принимаем только данные для новостей, помещенные в // какой-нибудь тег. Все остальные символьные данные // (как правило это пустое пространство, использованное // для форматирования) мы опускаем за ненадобностью. if ((is_array($currentNews)) && ($index)) $currentNews[$index] = $data; } // Создаем SAX парсер, который будет использоваться для // обработки XML-данных. $parser = xml_parser_create(); // Регистрируем функции для обработки различных типов // XML-данных: // - начальный и конечный тэги XML xml_set_element_handler($parser,'saxStartElement','saxEndElement'); // - символьные данные xml_set_character_data_handler($parser,'saxCharacterData'); // Также существуют аналогичные функции для регистрации // обработчиков других типов XML-данных. // Убираем case folding, в этом случае имена тэгов будут // передаваться обработчикам в оригинальном виде. Если case // folding включен, то все имена тегов будут переведены // в верхний регистр. xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false); // Получаем содержимое XML-файла с новостями. $xml = join('',file('castle.xml')); // Производим парсинг (разбор) полученного XML-файла. // В процессе разбора парсер будет вызывать описанные нами // функции и в результате мы получим массив $news, // содержащий новости из XML-файла. if (!xml_parse($parser,$xml,true)) // Парсер возвращает значение FALSE, если произошла // какая-либо ошибка. В этом случае мы также прекращаем // выполнение скрипта и возвращаем ошибку. die(sprintf('Ошибка XML: %s в строке %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); // Уничтожаем парсер, освобождая занятые им ресурсы xml_parser_free($parser); print_r ($news); ?> Как мне в 120 строке вместо castle.xml подставить $XML чтобы все коректно отоброжалось???
цитировать не буду, ровно как и рассказывать, но ссылочку на АФФТАРА, так усердно расставившего комментарии, обязан был поставить, ИМХО.
код взят со странички http://www.providers.ru/articles/php/xm ... intro.html а как выполнить, то что нужно автару? - сначала надо узнать что он именно хотел. Точнее что именно у него хранится в $XML. Если массив с xml-тегами, - то file('castle.xml') меняем на $XML, а если просто xml-структура, то $xml = $XML; Думаю логично Или я ошибаюсь?
Извиняюсь что не так подрбно описал (я еще новичок вэтом деле). Содержание casle.xml <?xml version="1.0"?> <CastleResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ws.darkagesworld.com"> <status>Ok</status> <serverTs>2008-05-17T14:57:09.8835118+04:00</serverTs> <castles> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок На Скале</castleName> <ownerClanName>Оправдатели Хаоса</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Альбинар</castleLocation> <castleName>Замок Девы</castleName> <ownerClanName>Brotherhood of Steel</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок Ангелов</castleName> <ownerClanName>Children Of Holy Shadow</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок Скорби</castleName> <ownerClanName>Клещи</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок Стали</castleName> <ownerClanName>Клещи</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок с Привидениями</castleName> <ownerClanName>VampireS</ownerClanName> <activeAssault> <startTs>2008-05-17T14:50:13.74+04:00</startTs> <attackers> <string>Serg M</string> </attackers> <defenders> <string>Maguchij Svin</string> </defenders> </activeAssault> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок Белого Камня</castleName> <ownerClanName>Chambers DeaD</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Авалон</castleLocation> <castleName>Замок Страха</castleName> <ownerClanName>Империя</ownerClanName> <pendingAssaults> <BattleAppData> <startTs>2008-05-17T15:00:54.77125+04:00</startTs> <attackers> <string>Dark kitten</string> </attackers> </BattleAppData> </pendingAssaults> </CastleInfo> </castles> </CastleResult> Если я подставляю вместо 'castle.xml' $XML то выдает ошибку Warning: file($XML) [function.file]: failed to open stream: No such file or directory in Z:\home\localhost\www\moy\index.php on line 120 Warning: join() [function.join]: Bad arguments. in Z:\home\localhost\www\moy\index.php on line 120 Ошибка XML: Invalid document end в строке 1 Содержание $XML <?xml version="1.0" encoding="utf-8"?> <CastleResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ws.darkagesworld.com"> <status>Ok</status> <serverTs>2008-05-17T21:13:44.7042216+04:00</serverTs> <castles> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок На Скале</castleName> <ownerClanName>Оправдатели Хаоса</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Альбинар</castleLocation> <castleName>Замок Девы</castleName> <ownerClanName>Старперы</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок Ангелов</castleName> <ownerClanName>Children Of Holy Shadow</ownerClanName> <activeAssault> <startTs>2008-05-17T20:23:11.9397827+04:00</startTs> <attackers> <string>Useless</string> <string>globyska</string> <string>PODROSTOK</string> <string>Scavenger</string> </attackers> <defenders> <string>Warrior king</string> <string>Кира</string> <string>ХудойМачо</string> </defenders> </activeAssault> </CastleInfo> <CastleInfo> <countyName>Окрестности Альбинара</countyName> <castleLocation>Окрестности Альбинара</castleLocation> <castleName>Замок Скорби</castleName> <ownerClanName>Клещи</ownerClanName> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок Стали</castleName> <ownerClanName>Fallen Heroes</ownerClanName> <pendingAssaults> <BattleAppData> <startTs>2008-05-17T21:14:42.9275+04:00</startTs> <attackers> <string>Uranija</string> </attackers> </BattleAppData> </pendingAssaults> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок с Привидениями</castleName> <ownerClanName>Fallen Heroes</ownerClanName> <pendingAssaults> <BattleAppData> <startTs>2008-05-17T21:14:48.380625+04:00</startTs> <attackers> <string>Черный</string> </attackers> </BattleAppData> </pendingAssaults> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Авалон</castleLocation> <castleName>Замок Страха</castleName> <ownerClanName>Fallen Heroes</ownerClanName> <activeAssault> <startTs>2008-05-17T21:05:17.380625+04:00</startTs> <attackers> <string>123GASHA</string> <string>АВПин</string> </attackers> <defenders> <string>CABRON</string> <string>lemmik</string> <string>STRELETS</string> <string>Злой мускул</string> <string>Мутант</string> <string>хаггинг</string> </defenders> </activeAssault> </CastleInfo> <CastleInfo> <countyName>Окрестности Авалона</countyName> <castleLocation>Окрестности Авалона</castleLocation> <castleName>Замок Белого Камня</castleName> <ownerClanName>Fallen Heroes</ownerClanName> <activeAssault> <startTs>2008-05-17T21:11:42.724375+04:00</startTs> <attackers> <string>istorik</string> </attackers> <defenders> <string>ViCer</string> </defenders> </activeAssault> </CastleInfo> </castles> </CastleResult>
castle.xml - файл $XML - переменная со структурой xml. Разницу не видишь? Поясняю что делает строчка 120: $xml = join('',file('castle.xml')); 1) file('castle.xml') - возвращает содержимое файла в виде массива строк 2) join() - "склеивает", если можно так выразиться, элементы полученного массива в "строку" (опять же если можно так выразиться) с разделителем ''. Тебе, если у тебя в $XML лежит готовая структура (не массив, и не путь к хмл-файлу), нужно написать, вместо 120 строки просто: $xml = $XML; Правильно я объяснил, уважаемые гуру?
topas хочу узнать Ваше мнение. С чем это связано? Он такой же как и все. Зашел и спросил... Объясните мне и я больше так не буду тем более, что сам сейчас разбираюсь с этим хмл, а на топик на мой никто не отвечает
ShamahN, Основное отличие автора от Вас: Вы стараетесь разобраться сами. Авотр же, в свою очередь, не желает сам вникать в суть проблемы: ему нужно, чтобы мы показали пальцем. И это для того, чтобы у Него работало. Имхо. Я, лично, такими вещами не занимаюсь, поэтому в этой теме меня больше не будет
topas Вашу точку зрения понял, но контингент для меня пока делится на тех кто помогает и кто ищет помощи. Может скоро начну разбираться ...