它不 return 所有使用 SimpleXML 的值

It does not return all values using SimpleXML

我正在 PHP 中使用 XML 类型的数据库。使用 SimpleXML 我正在使用 documentation。但是在收集一个值的时候,它仍然在第一个节点。

这里XML-DataBase

<?php

$xml = simplexml_load_file('course_catalog.xml');

foreach($xml->department->course as $paj) {
    if($paj->prerequisites->prereq == 'CS106B'){
        echo $paj->title . PHP_EOL;
    }
}

?>

Output;

Computer Organization and Systems

Introduction to Probability for Computer Scientists

都属于第一部门。但是不要访问第二个部门(那里有另一个-> 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;
    }
}

?>

但它没有 return 任何东西。

有什么想法吗?

问题是你只循环了第一个部门的课程,因为 - $xml->department->course。有几点可能有多个元素,即使 prereq 也可能有多个条目。

使用 XPath 查找 prereq 为 'CS106B' 的元素可能更简单。下面说 - 找到具有 prerequisitesprereq 元素且值为 '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;
                }
            }
        }
    }
}

主要是不是所有的课程似乎都有先决条件,所以你必须在尝试循环之前检查一下。