我正在使用PHP中的XML类型数据库。使用SimpleXML我正在使用documentation。但是在收集值时,它仍然在第一个节点中。
<?php
$xml = simplexml_load_file('course_catalog.xml');
foreach($xml->department->course as $paj) {
if($paj->prerequisites->prereq == 'CS106B'){
echo $paj->title . PHP_EOL;
}
}
?>
输出;
计算机组织与系统
计算机科学家概率介绍
所有属于第一部门。但是不要访问第二个部门(那里有另一个部门 - &gt; prereq'CS106B')
然后我尝试了这个......收集所有部门而不是陷入困境(或者我认为)
<?php
$xml = simplexml_load_file('course_catalog.xml');
foreach($xml->department as $paj) {
if($paj->course->prerequisites->prereq == 'CS106B'){
echo $paj->course->title . PHP_EOL;
}
}
?>
但它不会返回任何东西。
有什么想法吗?
答案 0 :(得分:1)
问题在于,由于 - $xml->department->course
,您只是在第一个部门的课程中循环。有几个点可能有多个元素,即使prereq
可能有多个条目。
使用XPath查找prereq
为'CS106B'的元素可能更简单。以下说明 - 查找具有prerequisites
然后prereq
元素的课程,其值为'CS106B'
...
$courses = $xml->xpath("//course[prerequisites/prereq/text()='CS106B']");
foreach ( $courses as $course ) {
echo $course->title . PHP_EOL;
}
使用XML文件生成
Computer Organization and Systems
Introduction to Probability for Computer Scientists
Digital Systems II
不使用XPath ...
foreach($xml->department as $paj) {
foreach ( $paj->course as $course ) {
if ( isset($course->prerequisites)) {
foreach ( $course->prerequisites->prereq as $prereq ) {
if($prereq == 'CS106B'){
echo $course->title . PHP_EOL;
}
}
}
}
}
主要的是,并非所有课程都有先决条件,所以你必须在尝试循环之前检查它。