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

如何在PHP中循环遍历指定XML内容?新手技术求助

解决PHP遍历XML内容的问题

你的代码中XPath查询失败的核心原因是路径未包含XML根节点<v-ov>,导致无法定位到目标元素。以下是修正后的完整实现,包含遍历逻辑的详细说明:

修正后的代码

$xmlstring=<<<XML
<?xml version="1.0" encoding="utf-8"?>
<v-ov version="1.0">
<object vk="1" model="top">
<field type="BigIntegerField" name="bolpo">678</field>
<field name="pdop">
<object wk="1" model="stage">
<field type="DateTimeField" name="updated_on">10 Dec, 2020, 10:00 </field>
</object>
<object wk="2" model="stage">
<field type="DateTimeField" name="updated_on">11 Dec, 2020, 10:00 </field>
</object>
</field>
</object>
</v-ov>
XML;

// 初始化XML解析对象
$xml = new SimpleXMLElement($xmlstring);

// 修正XPath路径:从根节点<v-ov>开始定位目标元素
$stageObjects = $xml->xpath('/v-ov/object[@model="top"]/field[@name="pdop"]/object');

// 循环遍历每个stage对象
foreach ($stageObjects as $stage) {
    // 提取wk属性值(强制转为字符串)
    $wk = (string)$stage['wk'];
    // 定位当前stage下的updated_on字段并提取内容
    $updatedField = $stage->xpath('./field[@name="updated_on"]')[0];
    $updatedOn = (string)$updatedField;
    
    echo "Stage {$wk}: 更新时间 {$updatedOn}\n";
}

关键细节说明

  1. XPath路径修正:必须以XML根节点<v-ov>作为路径起点,才能正确逐层定位到目标的<object>元素
  2. 类型转换:SimpleXMLElement返回的属性和节点值是对象类型,需用(string)强制转换为字符串才能正常输出或使用
  3. 精准字段定位:通过子XPath./field[@name="updated_on"]确保获取到每个stage下指定名称的字段,避免多字段场景下的取值错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:50:23