Php 它不会使用SimpleXML返回所有值

Php 它不会使用SimpleXML返回所有值,php,xml,simplexml,Php,Xml,Simplexml,我正在用PHP处理一个XML类型的数据库。我正在使用SimpleXML。但在收集值时,它仍保留在第一个节点中 这里 部门->课程作为$paj){ 如果($paj->先决条件->预请求=='CS106B'){ echo$paj->title.PHP\u EOL; } } ?> 产出 计算机组织与系统 计算机科学家概率论导论 都属于第一部门。但不要访问第二个部门(其中有另一个->prereq'CS106B') 然后我尝试了这个。。。收集所有部门,而不是一开始就陷入困境(我想是这样) 部门名称为$p

我正在用PHP处理一个XML类型的数据库。我正在使用SimpleXML。但在收集值时,它仍保留在第一个节点中

这里

部门->课程作为$paj){
如果($paj->先决条件->预请求=='CS106B'){
echo$paj->title.PHP\u EOL;
}
}
?>
产出

计算机组织与系统

计算机科学家概率论导论

都属于第一部门。但不要访问第二个部门(其中有另一个->prereq'CS106B')

然后我尝试了这个。。。收集所有部门,而不是一开始就陷入困境(我想是这样)

部门名称为$paj){
如果($paj->课程->先决条件->预请求=='CS106B'){
echo$paj->course->title.PHP\u EOL;
}
}
?>
但它不会返回任何内容


有什么想法吗?

问题是,由于-
$xml->department->course
,您只在第一个系的课程上循环。有几个点可能有多个元素,即使
prereq
可能有多个条目

使用XPath查找
prereq
为“CS106B”的元素可能更简单。以下说明-查找具有
先决条件
的课程,然后查找值为
'CS106B'
prereq
元素

$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;
                }
            }
        }
    }
}

最重要的是,并非所有课程都有先决条件,因此在尝试循环学习之前,您必须检查这些先决条件。

谢谢!。。我刚刚用Xpath实现了这一点。没有Xpath有什么方法可以做到这一点吗?(有时我会对Xpath发疯)我明白了。我想我应该开始使用Xpath。虽然我找不到好的导游。非常感谢你的帮助
Computer Organization and Systems

Introduction to Probability for Computer Scientists

Digital Systems II
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;
                }
            }
        }
    }
}