它不 return 所有使用 SimpleXML 的值
It does not return all values using SimpleXML
我正在 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;
}
}
?>
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' 的元素可能更简单。下面说 - 找到具有 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;
}
}
}
}
}
主要是不是所有的课程似乎都有先决条件,所以你必须在尝试循环之前检查一下。
我正在 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;
}
}
?>
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' 的元素可能更简单。下面说 - 找到具有 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;
}
}
}
}
}
主要是不是所有的课程似乎都有先决条件,所以你必须在尝试循环之前检查一下。