Я просматривал другие вопросы, опубликованные здесь на эту тему, но все они, похоже, имеют общий «симметричный» 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?
Ваш 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
Других решений пока нет …