如何在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"; }
关键细节说明
- XPath路径修正:必须以XML根节点
<v-ov>作为路径起点,才能正确逐层定位到目标的<object>元素 - 类型转换:SimpleXMLElement返回的属性和节点值是对象类型,需用
(string)强制转换为字符串才能正常输出或使用 - 精准字段定位:通过子XPath
./field[@name="updated_on"]确保获取到每个stage下指定名称的字段,避免多字段场景下的取值错误
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

