PHP如何通过大括号获取SimpleXMLElement对象指定路径的XML值?
根因说明
PHP 的对象动态属性访问语法$obj->{$property}仅支持将变量内容作为单个属性名查找,不会自动解析字符串中->代表的多层级属性路径,因此你直接把拼接好的路径字符串放在大括号里的写法无法生效。
实现方案
你可以将动态路径拆分后逐层遍历XML对象获取目标值,代码示例如下:
// 你的动态路径,从数据库取出的格式为 test->test_test $xml_path = 'test->test_test'; // 按分隔符拆分得到节点名数组 $node_list = explode('->', $xml_path); // 初始化当前节点为根XML对象 $current_node = $xml_obj; foreach ($node_list as $node_name) { // 逐层访问子节点 $current_node = $current_node->{$node_name}; } // 最终取值需要强转为string,避免直接操作SimpleXMLElement对象带来的问题 $target_value = (string)$current_node; echo $target_value;
报错说明
你遇到的Serialization of 'SimpleXMLElement' is not allowed报错,本质是尝试对SimpleXMLElement类型的对象直接执行序列化操作(比如存入session、调用serialize方法等)导致的。上述方案中我们最终将节点内容强转为字符串类型,即可规避该错误。
内容的提问来源于stack exchange,提问作者yfain
相关产品推荐
相关产品推荐

