Вывод для каждого цикла в массиве объектов SimpleXMLElement, на один узел дальше, затем вне цикла

#php #xml #simplexml

#php #xml #simplexml

Вопрос:

Я пытаюсь выполнить цикл по массиву, созданному simplexml_load_file, при доступе к массиву вне моего для каждого цикла я получаю ожидаемые результаты,

 print_r ($feedobject->Item[0]->attributes())`;
  

Вывод:

 SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [ID] => 202fnl
            [TableID] => newitem
        )
)
  

При доступе через my для каждого цикла

 foreach ($feedobject->Item[$x] as $value) {
    print_r ($value->attributes());    
$x  ;
}
  

Я получаю неожиданные результаты (на один шаг дальше в массив)

 SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [TableFieldID] => description
            [Value] => Our 2-ounce plastic funnel is the perfect fit for our 8-ounce stainless steel flasks. It works!
        )
)
  

Xml-файл выглядит следующим образом

   <Item ID="202fnl" TableID="newitem">
        <ItemField TableFieldID="description" Value="Our 2-ounce plastic funnel is the perfect fit for our 8-ounce stainless steel flasks. It works!"/>
  

Почему это происходит и есть ли у кого-нибудь лучшее предложение для перебора определенных элементов этого массива?

Ответ №1:

Вы путаетесь в выборе элемента. Чтобы получить каждый <Item> , просто используйте $feedobject->Item .

 // select each `<Item>`
foreach ($feedobject->Item as $value) {
    echo $value->attributes()->ID;
}
  

Когда вы используете $feedobject->Item[$x] as $value , это уже указывает непосредственно на элементы внутри <Item> , которые показывают вам <ItemField> .

Комментарии:

1. После этого получил правильный вывод, большое вам спасибо.

2. @GreggoryWiley уверен, что рад, что это помогло