You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:34:28