Парсинг XML за допомогою SimpleXML
Сайт про те, як стати програмістом і як із цим жити потім
Днями почав переробляти свою систему внутрішньої звітності фірми, про загальний устрій якої писав недавно. Не кривлячи душею, скажу, що виріс над собою у плані PHP, і, як наслідок, зрозумів, що алгоритм системи є достатньо кривою для того, щоб я його переписав.
До цього XML-документ розбивався за допомогою функцій, які запозичені з PHP 4-ї версії. Однак PHP5 подарував світові дуже зручну річ під назвою SimpleXML. Про те, як же з ним працювати, і йтиметься сьогодні.
Варто почати з того, що SimpleXML - це окремий модуль, а тому його треба заздалегідь підключити на сервері, що використовується.
Тепер ми можемо працювати!
Чарівність цієї функції в тому, що їй цілком спокійно можна передати файл з будь-якого сервера. Таким чином, у нас з'являється можливість обробляти зовнішні xml-розвантаження (наприклад, Яндекс-XML або сторонні RSS-стрічки).
На виході функція видає масив. Підводний камінь, з яким я зіткнувся, в тому, що XML може мати кострубату структуру, а тому раджу для початку провести образне трасування і вивести масив, щоб зрозуміти, як же функція його обробила. Після цього можна розпочинати обробку отриманих даних.
Для прикладу я візьму просту конструкцію звідси:
> Отже, це мова. Це все одно мова програмування. Чи це скриптова мова? Все розкривається в цьому документальному фільмі, схожому на фільм жахів.
> > > PHP вирішує всі мої завдання в web > > type = "thumbs" > 7 > type = "stars" > 5 > type = "mpaa" > PG > > >
Нехай це буде файл export.xml, який лежить прямо в корені мого сервера разом ізскриптом, що його обробляє. Масив будується відповідно до структури DOM-елементів у XML-документі. Обробка починається від кореня. Для того, щоб отримати ім'я Ms. Coder, ми повинні побудувати наступний шлях: $xml->movies->movie->characters->character[0]->name. Звертаю увагу, що ми вибираємо конкретне значення. Звідси й береться запис такого роду character[0] — не забуваємо, що ми працюємо з масивом!
Як і будь-який масив, наші дані можна обробити за допомогою циклу foreach. Код буде такий:
$xml = simplexml_load_file ( 'export.xml'); //вивантажили файл $ttl = $xml -> movies -> movie -> title; //отримали заголовок. він один, так що [0] чи інше значення ставити не треба
foreach ( $xml -> movies -> movie -> caracters as $crc ) // а тепер попрацюємо в динаміці < //виведемо імена героїв $name = $crc -> caracter -> name; echo ("$name "); >
Такий код покладе в змінну $ttl текст «PHP: Поява Парсера», а потім вистрочить на екран імена героїв Ms. Coder, Mr. Coder, Mr. Parser.