如何从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
相关产品推荐
相关产品推荐

