xml — SimpleXml и php итерация

Я просматривал другие вопросы, опубликованные здесь на эту тему, но все они, похоже, имеют общий «симметричный» XML-файл.

Я начинаю с вызова:

$xml_testimonials=simplexml_load_file("bck/testimonials.xml");

Я не могу повторить этот файл:

<?xml version="1.0" encoding="utf-8"?>

<testimonials>

<description><![CDATA[
<p>Give us your feeback!</p>
]]></description>

<testimonials_collection>

<testimonial>
<testimonial_name>
Dummy Name
</testimonial_name>
<testimonial_content>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero venenatis, posuere massa     vitae, volutpat massa. Maecenas placerat ac metus ut pulvinar.
</testimonial_content>
</testimonial>

<testimonial>
<testimonial_name>
Dummy Name
</testimonial_name>
<testimonial_content>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero venenatis, posuere massa     vitae, volutpat massa. Maecenas placerat ac metus ut pulvinar.
</testimonial_content>
</testimonial>

<testimonial>
<testimonial_name>
Dummy Name
</testimonial_name>
<testimonial_content>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero venenatis, posuere massa vitae, volutpat massa. Maecenas placerat ac metus ut pulvinar.
</testimonial_content>
</testimonial>

</testimonials_collection>

</testimonials>

Я пытаюсь использовать:

foreach($xml_testimonials->testimonials->testimonials_collection as $testimonial) {
print $testimonial->testimonial->testimonial_name;
}

и я получаю

Warning: Invalid argument supplied for foreach()

Также есть ли способ избежать использования и сохранения тегов HTML?

1

Решение

Ваш XML загружается и анализируется правильно, однако при использовании SimpleXML корневой узел документа XML не представлен в структуре результирующего объекта. Это означает, что вместо того, чтобы начать свой обход с <testimonials> (корневой узел здесь) самый высокий уровень доступа на самом деле <testimonials_collection>,

Так что ваш цикл должен выглядеть так:

// Iterate <testimonial> nodes beneath <testimonials_collection>
foreach($xml_testimonials->testimonials_collection->testimonial as $testimonial) {
// And get internal details of each <testimonial> node...
echo $testimonial->testimonial_name;
}

Вот демонстрация, извлечение Dummy Name из 3 узлов:
http://codepad.viper-7.com/rQZwOJ

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]