X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите с xml-парсером, Есть пример, надо усложнить
battrack
battrack
Topic Starter сообщение 13.1.2009, 23:25; Ответить: battrack
Сообщение #1


Нашел статейку как написать простейший парсер xml-файлов. Там приведены примеры. Не буду их тут цитировать, а просто дам ссылку: http://www.providerz.ru/articles/php/xml-sax-dom-intro.html
(там в довольно сжатой форме рассматривается написание парсера тремя способами: с помощью sax, dom, xpath).

У меня возникла такая проблема: если усложнить сам xml- файл и сделать например так чтобы тег text содержал в себе еще один тег, т.е. что-то вида:

<newsLine>
<news date="1.1.2002">
<title>title 1</title>
<text>
<part1>text part1 1</part1>
<part2>text part1 2</part2>
</text>
</news>
<news date="5.1.2002">
<title>title 2</title>
<text>
<part1>text part2 1</part1>
<part2>text part2 2</part2>
</text>
</news>
<news date="10.1.2002">
<title>title 3</title>
<text>
<part1>text part3 1</part1>
<part2>text part3 2</part2>
</text>
</news>
</newsLine>


так вот как будет выглядеть код sax парсера?

и еще, раз уж я тут задам еще вопрос: пробую вариант с парсерами на основе DOM или xPath, там есть такая строка: $xml = xmldoc($xml);

мне выдается ошибка, что не может выбрать неопределенную функцию xmldoc
Подскажите в чем дело
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 14.1.2009, 11:15; Ответить: ZiTosS
Сообщение #2


так вот как будет выглядеть код sax парсера?

Можно оставить также. Тогда обращение к элементу text будет давать 1, а part1 и part2 будут элементами того же массива.
Array
(
    [0] => Array
        (
            [date] => 1.1.2002
            [title] => title 1
            [text] =>

            [part1] => text part1 1
            [part2] => text part1 2
        )

    [1] => Array
        (
            [date] => 5.1.2002
            [title] => title 2
            [text] =>

            [part1] => text part2 1
            [part2] => text part2 2
        )

    [2] => Array
        (
            [date] => 10.1.2002
            [title] => title 3
            [text] =>

            [part1] => text part3 1
            [part2] => text part3 2
        )

)


Поэтому обращаться к ним в цикле, так же как и к другим...
<?php
foreach($news as $n)
{
    echo $n['title'];
    echo (isset($n['date'])) ? $n['date'] : "Дата не указана";
    echo $n['part1'];
    echo $n['part2'];
}
?>


Но это всё же неправильно... У нас написан простой SAX обработчик, и для обработки вложенности надо дописывать функцию
function saxStartElement($parser,$name,$attrs)
{
    global $currentNews,$index;

    switch($name)
    {
        case 'newsLine':
// Тег newsLine содержит все новости. Мы должны подготовить
// массив $news для приема новостей из XML файла.
            $news = array();
            break;
        case 'news':
// Каждая новость находится в теге news. Подготавливаем массив
// $currentNews для приема этой новости
            $currentNews = array();
// Если у новости есть дата - сохраняем ее в массиве
            if (in_array('date',array_keys($attrs)))
                $currentNews['date'] = $attrs['date'];
            break;
        default:
// Все остальные теги, которые могут встретиться в XML файле
// находятся внутри тега <news>, поэтому мы просто запоминаем
// их название с тем, чтобы знать, какие именно данные мы
// обрабатываем.
            $index = $name;
            break;
    };
}

надо дописывать в switch обработку тега text, тогда у вас уже будет массив в массиве ;)

и еще, раз уж я тут задам еще вопрос: пробую вариант с парсерами на основе DOM или xPath, там есть такая строка: $xml = xmldoc($xml);

мне выдается ошибка, что не может выбрать неопределенную функцию xmldoc


А вы для начала установили данный обработчик на ваш сервер?
DOMXML

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужен сайт с автонаполнением по XML
1 REGNET 1227 7.3.2024, 15:08
автор: REGNET
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 725 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) RTB/XML Партнерская сеть Trafficstore.pro
0 trafficstore2x2 1573 26.3.2021, 15:44
автор: trafficstore2x2
Открытая тема (нет новых ответов) RTB/XML Партнерская сеть Trafficstore.pro
0 trafficstore2x2 1016 23.3.2021, 18:53
автор: trafficstore2x2
Открытая тема (нет новых ответов) Zel.Biz - CPA/CPI партнерка и Push-сеть (XML JSON feed)
0 zelads1 886 27.12.2020, 17:05
автор: zelads1


 



RSS Текстовая версия Сейчас: 19.4.2024, 22:21
Дизайн