PHP中使用SimpleXML无法获取XML数据库所有匹配值的问题
解决SimpleXML仅获取第一个department节点内容的问题
嘿,我懂你遇到的麻烦了——你当前的代码只在第一个<department>节点下遍历课程,所以所有匹配结果都来自第一个部门,完全没碰其他部门的内容。
问题出在哪?
在SimpleXML里,当XML文档存在多个同名的子节点(比如多个<department>)时,直接用$xml->department访问的话,默认只会返回第一个匹配的节点。你原来的循环foreach($xml->department->course as $paj)其实是在遍历第一个department下的所有course,自然看不到其他部门的内容。
修正后的代码
你需要先遍历所有的<department>节点,再在每个部门下遍历对应的课程:
$xml = simplexml_load_file('course_catalog.xml'); // 先遍历所有department节点 foreach($xml->department as $dept) { // 再遍历当前部门下的每一门课程 foreach($dept->course as $paj) { if($paj->prerequisites->prereq == 'CS106B'){ echo $paj->title . PHP_EOL; } } }
额外小提示(可选)
如果你的课程可能有多个<prereq>节点(比如一门课需要多门前置课),那直接用$paj->prerequisites->prereq == 'CS106B'可能会漏判,这时候你可以再嵌套一个foreach遍历所有prereq:
foreach($xml->department as $dept) { foreach($dept->course as $paj) { // 遍历当前课程的所有前置课 foreach($paj->prerequisites->prereq as $prereq) { if($prereq == 'CS106B'){ echo $paj->title . PHP_EOL; break; // 找到匹配就退出循环,避免重复输出 } } } }
内容的提问来源于stack exchange,提问作者acruma
相关产品推荐
相关产品推荐

