Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288

Спарсить данные из xml

05.06.2015, 22:19. Показов 2332. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
XML
1
2
<?xml version="1.0" encoding="utf-8"?>
<request date="Fri, Jun 5, 2015 21:06:46 MSK" protocol="open" uid="88cc80c1-4f62-4591-b121-2feb3f1bfa9b"><abonent isnn="1082" operator="mts-all" phone="79852301733"/>  <content-text content-type="text/plain">Основной текст</content-text></request>
Для меня вяз сложность в том что эти данные не разделены ну типа
<date>Fri, Jun 5, 2015 21:06:46 MSK</date>
<protocol>open</protocol>
и т д. Не могли бы помочь написать это парсер, чтобы в масивчик загнать эти данные типа

PHP
1
2
3
4
5
6
7
$xml[date] => Fri, Jun 5, 2015 21:00:36 MSK
$xml[protocol] => open
$xml[uid] => a5b6b37a-2224-4758-8fbc-2f708a537d09
$xml[isnn] => 1082
$xml[operator] => mts-all
$xml[phone] => 79852301733
$xml[content-text] => Основной текст
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2015, 22:19
Ответы с готовыми решениями:

Спарсить XML
Всем доброго времени суток. Есть такой XML файлик: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;!DOCTYPE yml_catalog SYSTEM...

Правильно спарсить данные из запроса
И снова здравствуйте. Каким образом спарсить данные, к примеру &quot;classid&quot; из данного ответа: ...

Не могу спарсить данные с сайта
Пациент: https://www.spr.ru/all/ использую cURL: function get_curl($url){ $ch = curl_init(); curl_setopt($ch,...

14
20 / 20 / 12
Регистрация: 27.04.2012
Сообщений: 145
05.06.2015, 22:34
есть волшебная функция simplexml_load_file(); Она превращает хмл в обьект.
PHP
1
$xml = simplexml_load_file($xml);
а потом можно сделать типа такого: (это из меня кусок, но одолжно быть понятно)
PHP
1
2
3
4
5
foreach ($xml->description as $description) {
    
$fio = trim($description->$ti->author->$fn . " " . $description->$ti->author->$ln); 
$genre = trim($description->$ti->genre);
}
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
05.06.2015, 22:55  [ТС]
ljubomir, спасибо за функцию
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
    header("Content-type: text/html; charset='utf-8'");
    if (file_exists('test.xml')) {
    $xml = simplexml_load_file('test.xml');
    echo "<pre>";
    print_r($xml);
    echo "</pre>";
    }else{
        exit('Не удалось открыть файл test.xml.');
    }
?>
Вот настрочил
Результат выполнения

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [date] => Fri, Jun 5, 2015 21:06:46 MSK
            [protocol] => open
            [uid] => 88cc80c1-4f62-4591-b121-2feb3f1bfa9b
        )
 
    [abonent] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [isnn] => 1082
                    [operator] => mts-all
                    [phone] => 79852301733
                )
 
        )
 
    [content-text] => Основной текст
)

а вот с foreach не совсем понял (
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
05.06.2015, 22:59
Цитата Сообщение от Monster-95 Посмотреть сообщение
Вот настрочил
Результат выполнения
Теперь, чтобы получить дату, можно вывести echo $xml->attributes['date']. Про остальное думаю догадаетесь.
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
05.06.2015, 23:03  [ТС]
pav1uxa, Да это то я пробовал но беда в том что на экран нечего не выводит а точнее выводит пустую строку
0
20 / 20 / 12
Регистрация: 27.04.2012
Сообщений: 145
05.06.2015, 23:11
Monster-95, оно да, как-то странно работает. попробуй типа такого

PHP
1
$xml->attributes->date
попробуй с


PHP
1
2
3
4
foreach ($xml->attributes as $attributes) {
    
echo attributes->date;
}
Кароче варинты. У меня только так заработало.

Добавлено через 3 минуты
Еще иногда приходится совать имена элементов массива в переменные, иначе не хочет понимать.
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
05.06.2015, 23:31  [ТС]
ljubomir, А у меня и этот не заработал


Добавлено через 18 минут
ljubomir, Есть больше идеи ?
0
20 / 20 / 12
Регистрация: 27.04.2012
Сообщений: 145
05.06.2015, 23:32
Monster-95, ммм... кинь свой xml, я попробую что-то
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
05.06.2015, 23:37  [ТС]
ljubomir,
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<request date="Fri, Jun 5, 2015 21:06:46 MSK" protocol="open" uid="88cc80c1-4f62-4591-b121-2feb3f1bfa9b">
    <abonent isnn="1082" operator="mts-all" phone="79852301733"/>
    <content-text content-type="text/plain">Текст</content-text>
</request>
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
06.06.2015, 00:16
в переменную status получаю подобный xml:
XML
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8" ?>
<package>
  <status>
    <msg id="1234" sms_id="0" sms_count="1" date_completed="2009-03-14T15:27:03">102</msg>
  </status>
</package>
потом разбираю его так:
PHP
1
2
3
4
5
6
7
8
9
$xml2 = new SimpleXMLElement($status);
 
                        foreach ($xml2->status->{'msg'} as $msg2)
                        {
                            $delivery_result['sms_id'] = $msg2['sms_id'];
                            $delivery_result['sms_count'] = $msg2['sms_count'];
                            $delivery_result['date_completed'] = $msg2['date_completed'];
                        }
                        $delivery_result['msg']=$xml2->status->{'msg'};
вдруг поможет...
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
06.06.2015, 00:24  [ТС]
Dmitry, Как вы его получаете именно файл имею ввиду
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
06.06.2015, 00:30
а, не! я не файл получаю. я xml получаю от чужого сервера в ответ на мой запрос...
я думал вопрос в том как разобрать сам xml..
0
 Аватар для Monster-95
53 / 53 / 26
Регистрация: 05.02.2013
Сообщений: 288
06.06.2015, 00:33  [ТС]
Dmitry, Да именно у меня файл в той же папке какой функцией впихнуть ее в переменную, скажем в $status
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
06.06.2015, 00:37
а если такой?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.06.2015, 08:50
Лучший ответ Сообщение было отмечено Monster-95 как решение

Решение

Цитата Сообщение от Monster-95 Посмотреть сообщение
Для меня вяз сложность в том что эти данные не разделены ну типа
<date>Fri, Jun 5, 2015 21:06:46 MSK</date>
<protocol>open</protocol>
и т д. Не могли бы помочь написать это парсер, чтобы в масивчик загнать эти данные типа
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<request date="Fri, Jun 5, 2015 21:06:46 MSK" protocol="open" uid="88cc80c1-4f62-4591-b121-2feb3f1bfa9b">
    <abonent isnn="1082" operator="mts-all" phone="79852301733"/>
    <content-text content-type="text/plain">Основной текст</content-text>
</request>
XML;
$dom = new DOMDocument;
$dom->loadXML($xml);
 
$request = $dom->getElementsByTagName("request")->item(0)->attributes;
$abonent = $dom->getElementsByTagName("abonent")->item(0)->attributes;
$contenttext = $dom->getElementsByTagName("content-text")->item(0)->nodeValue;
 
$xml = array();
$xml['date'] = $request->getNamedItem("date")->nodeValue;
$xml['protocol'] = $request->getNamedItem("protocol")->nodeValue;
$xml['uid'] = $request->getNamedItem("uid")->nodeValue;
$xml['isnn'] = $abonent->getNamedItem("isnn")->nodeValue;
$xml['operator'] = $abonent->getNamedItem("operator")->nodeValue;
$xml['phone'] = $abonent->getNamedItem("phone")->nodeValue;
$xml['content-text'] = $contenttext;
 
echo "<pre>".print_r($xml, true);
Результат:
Code
1
2
3
4
5
6
7
8
9
10
Array
(
    [date] => Fri, Jun 5, 2015 21:06:46 MSK
    [protocol] => open
    [uid] => 88cc80c1-4f62-4591-b121-2feb3f1bfa9b
    [isnn] => 1082
    [operator] => mts-all
    [phone] => 79852301733
    [content-text] => Основной текст
)
Вам осталось только в начале скрипта положить в переменную $xml сам код xml. Если он находится в файле, то можно функцией file_get_contents().
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2015, 08:50
Помогаю со студенческими работами здесь

Как спарсить некоторые данные из JSON
Приветствую! есть файл в формате JSON, вот пример его кода =&gt; 34339 =&gt; Alexander =&gt; Andreevich =&gt;...

Как спарсить данные вот из этого файла?
Конкретно нужно получить в переменные: значение code и число 2.6421. Чтобы было две переменные, значения которых были: USD 2.6421 ...

Где спарсить матчи или взять в ввиде json, ато спарсить не получается, нужны название. дата и время и коэфициенты
&lt;? include 'simple_html_dom.php'; $maxpost = '5'; // к-во постов $url = 'http://soccer365.ru/'; $ch = curl_init($url); ...

Как правильно спарсить xml
В общем есть Xml &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;Dictionary&gt; &lt;item&gt; &lt;key&gt; &lt;string&gt;14.23 Анализ финансовых...

Спарсить содержимое тегов в xml
Всем доброго времени суток! Возникла потребность вытащить информацию заключенную в туги в файле xml пример кода: &lt;?xml...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru