如何用XPath匹配所有variation_price*节点并赋值到数组?
问题解决:获取XML中所有variation_price*节点的值到数组
你的XPath语句存在两个关键错误:
name必须写成**name()**(带括号),这是XPath规范中获取节点名称的函数写法;- 路径缺少节点匹配符,
//[starts-with(...)]的语法不合法,需要指定匹配的节点类型,比如用*代表任意子节点。
另外,由于$product已经指向<post>节点,不需要用//从文档根节点开始查找,直接匹配当前节点下的子节点更高效。
正确实现步骤
- 用修正后的XPath获取目标节点:
$priceNodes = $product->xpath('*[starts-with(name(), "variation_price")]');
- 将SimpleXML节点对象转换为字符串值数组:
可以选择遍历或者用array_map简化操作:
// 方法一:遍历转换 $priceValues = []; foreach ($priceNodes as $node) { $priceValues[] = (string)$node; } // 方法二:array_map一行完成 $priceValues = array_map(fn($node) => (string)$node, $product->xpath('*[starts-with(name(), "variation_price")]'));
最终效果
执行后$priceValues数组会包含所有价格值:
Array ( [0] => 7.20 [1] => 7.40 [2] => 8.00 [3] => 8.50 [4] => 9.30 )
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

