PHP代码即使节点没有子节点,它只执行第二个foreach循环的<br>
部分,因此输出是空格,如果是子节点,则输出结果。尝试在第二个foreach循环之前放置一个if语句,仍然无法正常工作!
<?php
$xmlDoc = simplexml_load_file("contact.xml");
foreach ($xmlDoc->children() as $books) {
if ($books->Firstname == "John") {
echo $books->Firstname, "<br>";
echo $books->Lastname, "<br>";
echo $books->Nickname, "<br>";
foreach ($books->children() as $book) {
echo $book->CourseName, "<br>";
echo $book->ID, "<br>";
}
}
}
?>
结果:
John
Cruse
Tom
Software
484887
^为什么我会获得额外的3个换行符,如何摆脱它们呢?
答案 0 :(得分:1)
只需更改第二个foreach标题:
foreach($books->children() as $book){
//^^^^^^^^^^
到此:
foreach($books->Course as $book){
//^^^^^^
因为您使用旧的foreach标题,所以PersonalInfo
Firstname
,Lastname
,Nickname
,Course
的{{1}}所有孩子都会遇到问题。只有最后一个(Course
)有一个CourseName和一个ID,所以其他的只打印了2个折线标记。
答案 1 :(得分:0)
使用 $书籍 - &GT;计数(); 它给你数数的孩子。 注意: SimpleXMLElement :: children()返回一个节点对象,无论当前节点是否有子节点。在返回值上使用count()以查看是否有任何子项。从PHP 5.3.0开始,可以使用SimpleXMLElement :: count()代替。