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

PHP使用simplexml_load_file读取XML无节点值输出问题

问题原因

代码无法获取目标数据是两个问题共同导致的:

  • XML根节点声明了默认命名空间,SimpleXML默认不会自动解析绑定默认命名空间下的节点,直接通过对象属性访问无法匹配到对应节点。
  • 节点访问层级错误:ICO、Obchodni_firma 不是 <Dotaz> 节点的直接子元素,二者都嵌套在 <Klicove_polozky> 节点内部,原代码直接从Dotaz节点下查找这两个字段,路径不匹配。
修复方案

调整代码逻辑,先处理命名空间匹配,再按照正确的节点层级访问字段即可,修复后的可运行代码如下:

<?php
$xmldata = simplexml_load_file("data.xml") or die("Failed to load");
// 获取XML中声明的所有命名空间
$namespaces = $xmldata->getNamespaces(true);
// 传入默认命名空间,遍历所有Dotaz节点
foreach($xmldata->children($namespaces[''])->Dotaz as $dotaz) {
    $keyItems = $dotaz->Klicove_polozky;
    // 读取字段,不存在则赋值为空字符串避免报错
    $ico = isset($keyItems->ICO) ? (string)$keyItems->ICO : '';
    $companyName = isset($keyItems->Obchodni_firma) ? (string)$keyItems->Obchodni_firma : '';
    echo $ico . ", " . $companyName . "<br>";
}
?>

运行后输出结果符合预期:

27074358, ,
, DOBROČINNÉ SDRUŽENÍ,
27074358, Asseco,

注:输出里的空值位置对应XML中对应查询条目下不存在的字段,比如第一个Dotaz节点没有Obchodni_firma字段、第二个Dotaz节点没有ICO字段,属于正常表现。

内容的提问来源于stack exchange,提问作者Slepice1234

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:18:19