Разбор XML с помощью php и SimpleXML

0

Я разбору и XML файл со списком зданий недвижимости. Все становится хорошо, я могу взять каждый узел и создать отдельный пост Wordpress с пользовательской информацией. Проблема в том, что я пытаюсь получить доступ к узлу изображений: в каждом здании есть узел изображения с несколькими изображениями в нем. Это то, что я делаю:

XML СТРУКТУРА

<annunci>
  <annuncio ..blablabla ...>
    ...some stuff...
    <immagine categoria="PLANIMETRIE" didascalia="img_5862" tipo="foto">659-{23d7ac25-549e-40ef-9cb2-1e6f687182ec}_0.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5864" tipo="foto">659-{8b9c3da4-edde-489a-8ca9-3dc91a0c5063}_1.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5868" tipo="foto">659-{57790b4a-2482-4a66-8f7f-1a11765d1cab}_2.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5870" tipo="foto">659-{b28b62f7-6375-4592-a269-c4ac8eac6087}_3.jpg</immagine>
        <immagine categoria="PLANIMETRIE" didascalia="img_5871" tipo="foto">659-{0bf70101-b0ec-4835-9a06-3b916ad21241}_4.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5872" tipo="foto">659-{dc5f87a1-364a-4c05-9a3a-be4cb51016f9}_5.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5875" tipo="foto">659-{2fe1524d-b454-423c-90bf-a6f9fff17e8d}_6.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5876" tipo="foto">659-{1060d120-b339-4bab-89cd-6b7781143a74}_7.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="img_5882" tipo="foto">659-{191c77d7-76f5-4fb9-873c-9221f755dcba}_8.jpg</immagine>
    <immagine categoria="PLANIMETRIE" didascalia="planimetria" tipo="foto">659-{14a9a6f0-dbf5-48a2-a204-976b9a146f43}_9.jpeg</immagine>
    ...some other stuff ...
  </annuncio>
</annunci>

И это код, который я использую в своем плагине:

 if (!$xml = simplexml_load_file($xml_path)) {
            echo 'unable to load XML file';
        } else {
        ...
         foreach ($xml->annuncio as $annuncio) {
          ...
          $immagini = (array)$annuncio->immagine;
          ...
          echo '<pre>';   //THIS IS FOR DEBUGGING
          print_r($immagini);
          echo '</pre>';  
         }

И я получаю такой массив, по одному для каждого здания, которое я разбираю:

Array
(
    [@attributes] => Array
        (
            [categoria] => PLANIMETRIE
            [didascalia] => img_5862
            [tipo] => foto
        )

    [0] => 659-{23d7ac25-549e-40ef-9cb2-1e6f687182ec}_0.jpg
    [1] => 659-{8b9c3da4-edde-489a-8ca9-3dc91a0c5063}_1.jpg
    [2] => 659-{57790b4a-2482-4a66-8f7f-1a11765d1cab}_2.jpg
    [3] => 659-{b28b62f7-6375-4592-a269-c4ac8eac6087}_3.jpg
    [4] => 659-{0bf70101-b0ec-4835-9a06-3b916ad21241}_4.jpg
    [5] => 659-{dc5f87a1-364a-4c05-9a3a-be4cb51016f9}_5.jpg
    [6] => 659-{2fe1524d-b454-423c-90bf-a6f9fff17e8d}_6.jpg
    [7] => 659-{1060d120-b339-4bab-89cd-6b7781143a74}_7.jpg
    [8] => 659-{191c77d7-76f5-4fb9-873c-9221f755dcba}_8.jpg
    [9] => 659-{14a9a6f0-dbf5-48a2-a204-976b9a146f43}_9.jpeg
)

Прежде всего, я не могу избавиться от атрибута, и всегда получаю сообщение об ошибке при попытке доступа к одиночным изображениям, например

echo $immagini[0];

Я уверен, что это что-то глупое, но я не могу найти решение, может кто-нибудь мне помочь?

EDIT 1 Извините, ошибка в том, что я пытаюсь получить доступ к одиночным изображениям в цикле:

foreach($immagini as $test) {
                echo $test;
            }

Я получил уведомление: массив для преобразования строк в...

EDIT 2 Я решил с циклом FOR, но все равно не понимаю: D В любом случае, это работает!

Теги:
parsing
simplexml

1 ответ

1
Лучший ответ

Мужчина,

Надеюсь, что у вас будет лучший опыт работы с DOMDocument, а затем с SimpleXML.

При работе со сложными XML-данными решение может быть не просто "простым", тогда вы не можете использовать SimpleXML для этого.

Работая с DOMDocument, я решаю сложные проблемы с бронированием билетов для авиакомпаний, использующих DOMDocument.

<?php
$dom = new DOMDocument();
$dom->loadXML('/path/to/xml.xml');
foreach ($dom->getElementsByTagName('annuncio') as $annuncio){
    foreach ($annuncio->getElementsByTagName('immagine') as $immagine){
        $categoria = $immagine->getAttribute('categoria');
    }
}
?>

Наслаждайтесь DOM!

  • 0
    Вы правы, но я впервые проанализировал XML-документ: мне пришлось работать с простым, почти пустым XML-файлом, и сегодня я получил большой-сложный! Я продолжил свою работу, когда начал (с simplexml), но теперь я думаю, что я изменю ее на DOM! Спасибо за ответ, и хорошего дня ^^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню