它不会使用SimpleXML返回所有值

时间:2018-03-18 17:33:15

标签: php xml 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;
    }
}

?>
  

输出;

     

计算机组织与系统

     

计算机科学家概率介绍

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

?>

但它不会返回任何东西。

有什么想法吗?

1 个答案:

答案 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;
                }
            }
        }
    }
}

主要的是,并非所有课程都有先决条件,所以你必须在尝试循环之前检查它。