PHP SimpleXML技术问询:从数据库XML中提取值
用PHP SimpleXML提取XML中的指定值
没问题,我来帮你搞定从这段XML里提取指定值的事儿~首先先把你提供的XML片段补全(你这里的<long...</void>截断了,我假设里面是具体的数值,比如<long>123456</long>),然后一步步来:
第一步:准备XML数据
先把从数据库取出的XML字符串整理好,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_161" class="java.beans.XMLDecoder"> <object class="atavism.agis.objects.AgisMob" id="AgisMob0"> <void property="name"> <string>Rachels</string> </void> <void property="oid"> <object class="atavism.server.engine.OID" id="OID0"> <void property="data"> <long>123456</long> </void> </object> </void> </object> </java>
第二步:用SimpleXML加载并提取值
这里推荐用XPath来定位节点,比依赖节点顺序更可靠,具体代码如下:
// 假设从数据库查询得到的XML字符串存在$xmlString中 $xmlString = '你的XML内容'; // 加载XML,同时处理加载失败的情况 $xml = simplexml_load_string($xmlString); if (!$xml) { die('XML加载失败,请检查数据格式是否完整正确'); } // 提取name的值:通过property属性定位到对应的void节点,再取子节点string的内容 $name = (string)$xml->xpath("//void[@property='name']/string")[0]; // 提取oid的data值:同样用XPath逐层定位 $oidData = (string)$xml->xpath("//void[@property='oid']/object/void[@property='data']/long")[0]; // 输出结果 echo "提取到的Name: $name\n"; echo "提取到的OID Data: $oidData\n";
关键说明
- 一定要用
(string)强制转换SimpleXMLElement对象,不然直接输出会得到对象而不是字符串值。 - 使用XPath的好处是不依赖节点的顺序,如果XML里的void节点顺序发生变化,代码依然能正确找到目标值,比用
$xml->object->void[0]这种索引方式更健壮。
内容的提问来源于stack exchange,提问作者mdsmith98
相关产品推荐
相关产品推荐

