Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 11.10.2012
Сообщений: 106

Парсер XML файла

12.01.2017, 19:46. Показов 783. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужна помощь с парсингом XML-ки пример ниже. Необходимо достать следующие данные, из PMActivity значение атрибутов (id и name) из PMActivityProps значение PMBoxType , для дальнейшей записи в БД , но это уже отдельная тема
XML
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<PMActivity_Groups>
<PMActivity id="{BF2A4EB7-0A5D-438C-B344-1196B08AD4CB}+00000000" Name="Работа1">
<PMActivityProps>
<Name>Работа1</Name>
<PMDefinitionString/>
<PMStatusString>WORKING</PMStatusString>
<PMAuthor>Slavik</PMAuthor>
<PMNote/>
<PMSource/>
<PMDescriptionString/>
<PMFacts/>
<PMConstraintsString/>
<PMObjectsString/>
<PMTitleColorReference/>
<PMTextColorReference/>
<PMBackgroundColorReference/>
<PMBoxType>1</PMBoxType>
<PMFrequency>1</PMFrequency>
<PMDuration>0</PMDuration>
<PMOverrideCostsFlag>0</PMOverrideCostsFlag>
<PMParentActivityRef>0</PMParentActivityRef>
</PMActivityProps>
</PMActivity>
<PMActivity id="{CE13EA18-59DC-44B7-9CA8-D997D3B5A255}+00000000" Name="ПодРабота1.1">
<PMActivityProps>
<Name>ПодРабота1.1</Name>
<PMDefinitionString/>
<PMStatusString>WORKING</PMStatusString>
<PMAuthor>Slavik</PMAuthor>
<PMNote/>
<PMSource/>
<PMDescriptionString/>
<PMFacts/>
<PMConstraintsString/>
<PMObjectsString/>
<PMTitleColorReference/>
<PMTextColorReference/>
<PMBackgroundColorReference/>
<PMBoxType>1</PMBoxType>
<PMFrequency>1</PMFrequency>
<PMDuration>0</PMDuration>
<PMOverrideCostsFlag>0</PMOverrideCostsFlag>
<PMParentActivityRef>0</PMParentActivityRef>
</PMActivityProps>
</PMActivity>
<PMActivity id="{D4B24ABB-50B9-4124-B8C0-7AAE28298CFC}+00000000" Name="ПодРабота1.2">
<PMActivityProps>
<Name>ПодРабота1.2</Name>
<PMDefinitionString/>
<PMStatusString>WORKING</PMStatusString>
<PMAuthor>Slavik</PMAuthor>
<PMNote/>
<PMSource/>
<PMDescriptionString/>
<PMFacts/>
<PMConstraintsString/>
<PMObjectsString/>
<PMTitleColorReference/>
<PMTextColorReference/>
<PMBackgroundColorReference/>
<PMBoxType>1</PMBoxType>
<PMFrequency>1</PMFrequency>
<PMDuration>0</PMDuration>
<PMOverrideCostsFlag>0</PMOverrideCostsFlag>
<PMParentActivityRef>0</PMParentActivityRef>
</PMActivityProps>
</PMActivity>
<PMActivity id="{A381BC2C-F220-4BE6-9B76-2CA29FC1C4E0}+00000000" Name="ПодРабота1.2.1">
<PMActivityProps>
<Name>ПодРабота1.2.1</Name>
<PMDefinitionString/>
<PMStatusString>WORKING</PMStatusString>
<PMAuthor>Slavik</PMAuthor>
<PMNote/>
<PMSource/>
<PMDescriptionString/>
<PMFacts/>
<PMConstraintsString/>
<PMObjectsString/>
<PMTitleColorReference/>
<PMTextColorReference/>
<PMBackgroundColorReference/>
<PMBoxType>3</PMBoxType>
<PMFrequency>1</PMFrequency>
<PMDuration>0</PMDuration>
<PMOverrideCostsFlag>0</PMOverrideCostsFlag>
<PMParentActivityRef>0</PMParentActivityRef>
</PMActivityProps>
</PMActivity>
<PMActivity id="{CDCE3291-10B2-4E37-8389-D3C6D039A6D9}+00000000" Name="ПодРабота1.2.2">
<PMActivityProps>
<Name>ПодРабота1.2.2</Name>
<PMDefinitionString/>
<PMStatusString>WORKING</PMStatusString>
<PMAuthor>Slavik</PMAuthor>
<PMNote/>
<PMSource/>
<PMDescriptionString/>
<PMFacts/>
<PMConstraintsString/>
<PMObjectsString/>
<PMTitleColorReference/>
<PMTextColorReference/>
<PMBackgroundColorReference/>
<PMBoxType>3</PMBoxType>
<PMFrequency>1</PMFrequency>
<PMDuration>0</PMDuration>
<PMOverrideCostsFlag>0</PMOverrideCostsFlag>
<PMParentActivityRef>0</PMParentActivityRef>
</PMActivityProps>
</PMActivity>
</PMActivity_Groups>
Добавлено через 2 часа 16 минут
Пытаюсь извлечь информации из тегов
XML
1
<Name></Name>
следующим образом, но он тащит по всему документу такие теги
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
26
27
28
29
30
31
32
33
34
35
$loadfile = new XMLReader();
    $loadfile->open('data/'.$_FILES['xmlFile']['name']);
    
    $filees = array();
    while ($loadfile->read()) {
        if ($loadfile->nodeType == XMLREADER::ELEMENT && $loadfile->localName == 'PMActivity_Groups') {
            while ($loadfile->read()) {
                if ($loadfile->nodeType == XMLREADER::ELEMENT && $loadfile->localName == 'PMActivity') {
                    while ($loadfile->read()) {
                        if ($loadfile->nodeType == XMLREADER::ELEMENT && $loadfile->localName == 'PMActivityProps'){
                            while ($loadfile->read()){
                                if (($loadfile->nodeType == XMLReader::ELEMENT) && ($loadfile->name == 'Name')){
                                    while ($loadfile->read()) {
                                        if ($loadfile->nodeType == XMLReader::TEXT) {
                                        $idx = 0;
                                        $xmlarr = array();
                                        $xmlarr[$idx]['PMActivityProps'][$loadfile->name] = $loadfile->value;
                                        
                                        print_r($xmlarr[$idx]['PMActivityProps'][$loadfile->name] = $loadfile->value);
                                        echo '<br>';
                                        }                                                                       
                                        elseif (($loadfile->nodeType == XMLReader::END_ELEMENT) && ($loadfile->name == 'Name')) {
                                        break;
                                        }
                                    }
                                }
                            }
                        }       
                        /*elseif (($loadfile->nodeType == XMLReader::END_ELEMENT) && ($loadfile->localName == 'PMActivityProps')) {
                        break; 
                    }*/
                }
            }   
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2017, 19:46
Ответы с готовыми решениями:

Парсер XML
Привет. Почему-то не работает парсер, если использовать переменные. Не работает: $qid= $_GET; $parse =...

Парсер xml
Есть .xml: &lt;character guid=&quot;59386&quot; name=&quot;Быдлюк&quot; classId=&quot;2&quot; raceId=&quot;3&quot; genderId=&quot;0&quot; level=&quot;80&quot; rank=&quot;0&quot; achPoints=&quot;3070&quot;/&gt; и много...

Парсер изображения с XML
нужно расшифровать и вывести как изображение в php документе. как это сделать?

5
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
12.01.2017, 21:26
PHP
1
2
3
$xml = file_get_contents('file.xml');
preg_match_all("~<name>(.*)</name>~ui", $xml, $m);
print_r($m[0]);
0
2 / 2 / 1
Регистрация: 11.10.2012
Сообщений: 106
12.01.2017, 23:33  [ТС]
Подскажи, с name я разобрался, а как вот сделать чтобы выводило id, name, pmboxtype, для каждого activity, я с циклами запутался, делаю вот так
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
26
27
28
29
30
31
32
33
while ($loadfile->read()) {
        if ($loadfile->nodeType == XMLREADER::ELEMENT && $loadfile->localName == 'PMActivity_Groups') {                 
            while ($loadfile->read()) {
                if ($loadfile->nodeType == XMLREADER::ELEMENT && $loadfile->localName == 'PMActivity' ) {
                $xmlarr['id'] = $loadfile->getAttribute('id');
                $xmlarr['Name'] = $loadfile->getAttribute('Name');
 
                //var_dump($filee);
                print_r($xmlarr['id']);
                echo '<br>';
                print_r($xmlarr['Name']);
                echo '<br>';
                }
                while ($loadfile->read()){
                    if (($loadfile->nodeType == XMLReader::ELEMENT) && ($loadfile->name == 'PMBoxType')){
                        while ($loadfile->read()) {
                            if ($loadfile->nodeType == XMLReader::TEXT) {
                                                
                                $xmlarr[$loadfile->name] = $loadfile->value;    
                                                        
                                print_r($xmlarr[$loadfile->name] = $loadfile->value);
                                echo '<br>';
                                
                                }                                                                       
                                elseif (($loadfile->nodeType == XMLReader::END_ELEMENT) && ($loadfile->name == 'PMBoxType')) {
                                break;
                            }
                        }
                    }
            }
        }   
    }
}
и он мне выводит id, name, pmboxtype первого activity, а дальше только pmboxtype
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
12.01.2017, 23:41
PHP
1
2
3
preg_match_all("~<PMActivity id=\"(.*)\" name=\"(.*)\">~ui", $xml, $m);
print_r($m[1]); //id
print_r($m[2]); //name
0
2 / 2 / 1
Регистрация: 11.10.2012
Сообщений: 106
12.01.2017, 23:57  [ТС]
а pmboxtype который соответствует каждому activity?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
13.01.2017, 00:03
Petar07, литературку почитайте, Вам это не повредит.
PHP
1
2
3
4
5
preg_match_all("~<PMActivity id=\"(.*)\" name=\"(.*)\">~ui", $xml, $m);
preg_match_all("~<pmboxtype>(.*)</pmboxtype>~ui", $xml, $m1);
for($i=0; $i<count($m[1]); $i++){
  echo $m[1][$i],' : ',$m[2][$i],' : ',$m1[1][$i], '<br />';
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2017, 00:03
Помогаю со студенческими работами здесь

PHP парсер XML
есть xml-документ data.xml &lt;pair&gt; &lt;shoes id=&quot;0&quot;&gt; &lt;image&gt;&lt;!]&gt;&lt;/image&gt; &lt;name&gt;Chuck Taylor All Star Leather&lt;/name&gt; ...

Подскажите адекватный парсер xml
Подскажите адекватный парсер xml ----- на php -- xml файл типа &lt;Entities version=&quot;2.0.0&quot;&gt; ...

Парсер xml файлов большого объёма
Всем привет! Хочу написать парсер для xml файла размером 15гб на PHP Возможно ли это? У меня не получается считывать файл по частям для...

php парсер XML в DataBase SQL
Приветствую. Помогите пожалуйста с парсером XML ответов. А именно приходит ответ в виде XML, по средствам SOAP. Задача: Вот XML...

Парсер не справляется с большим размером XML
День добрый! Есть парсер, который не справляется с большим файлом XML, в консоле показывает ошибку &quot;killed&quot; Файл: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru