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

如何从XML文件中提取距离数值?PHP新手求助

帮你从XML里提取公里数的PHP方案

别担心,作为PHP新手遇到XML解析问题太正常了,我给你两种简单易懂的方法,帮你顺利从这份XML里提取到公里数:

先明确下你的XML结构:公里数相关数据在 <distance> 节点下——<text> 里是带格式的文本(比如2,052 km),<value> 里是米数(2051694,转成公里只需除以1000),两种形式都可以按需获取。

方法一:用SimpleXML(新手友好)

SimpleXML是PHP里最适合入门的XML解析工具,代码简洁直观,上手快:

// 把你的XML数据存成字符串
$xmlData = '<DistanceMatrixResponse> <status>OK</status> <origin_address>Kolkata, West Bengal, India</origin_address> <destination_address>Mumbai, Maharashtra, India</destination_address> <row> <element> <status>OK</status> <duration> <value>140212</value> <text>1 day 15 hours</text> </duration> <distance> <value>2051694</value> <text>2,052 km</text> </distance> </element> </row> </DistanceMatrixResponse>';

// 加载XML字符串
$xml = simplexml_load_string($xmlData);

// 获取带单位的格式化距离文本(比如"2,052 km")
$distanceText = (string)$xml->row->element->distance->text;
echo "格式化后的距离:" . $distanceText . PHP_EOL;

// 获取数值型公里数(从米转换为公里)
$distanceMeters = (int)$xml->row->element->distance->value;
$distanceKm = $distanceMeters / 1000;
// 用number_format格式化输出,可选保留小数或整数
echo "数值型公里数:" . number_format($distanceKm) . " km" . PHP_EOL;

小提示:SimpleXML会把XML转换成对象,直接用->就能访问节点,但要记得把节点转成字符串/整数才能拿到实际值,不然返回的是SimpleXMLElement对象哦。

方法二:用DOMDocument + XPath(适合复杂XML)

如果之后遇到层级更复杂的XML,XPath查询会更灵活,能精准定位节点:

$xmlData = '<DistanceMatrixResponse> <status>OK</status> <origin_address>Kolkata, West Bengal, India</origin_address> <destination_address>Mumbai, Maharashtra, India</destination_address> <row> <element> <status>OK</status> <duration> <value>140212</value> <text>1 day 15 hours</text> </duration> <distance> <value>2051694</value> <text>2,052 km</text> </distance> </element> </row> </DistanceMatrixResponse>';

$dom = new DOMDocument();
// 加载XML,忽略格式错误(可选参数,避免小格式问题报错)
$dom->loadXML($xmlData, LIBXML_NOERROR);

// 创建XPath对象用于查询
$xpath = new DOMXPath($dom);

// 查询distance节点下的text内容
$textNode = $xpath->query('/DistanceMatrixResponse/row/element/distance/text')->item(0);
if ($textNode) {
    echo "格式化后的距离:" . $textNode->nodeValue . PHP_EOL;
}

// 查询distance节点下的value内容(米数)并转成公里
$valueNode = $xpath->query('/DistanceMatrixResponse/row/element/distance/value')->item(0);
if ($valueNode) {
    $distanceKm = (int)$valueNode->nodeValue / 1000;
    echo "数值型公里数:" . number_format($distanceKm) . " km" . PHP_EOL;
}

额外注意

  • 如果你的XML是从外部API获取的,记得先用file_get_contents()或者curl拿到完整的XML字符串,再传入解析函数。
  • XML是大小写敏感的,节点名称要和原XML完全一致,别写错大小写哦。

内容的提问来源于stack exchange,提问作者Mohammad Golam Dostogir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:29:46