当前位置: 首页 > 知识库问答 >
问题:

SimpleXMLElement-尝试获取非对象的属性

吕承福
2023-03-14

在响应中,我们接收一个xml文件,然后转换为SimpleXMLElement,然后根据需要访问元素和属性。然而,当直接从字符串响应加载xml而不是从保存的响应加载xml时,我们得到了“尝试获取非对象的属性”。

//This code works
$response = simplexml_load_file( "response.xml" );
var_dump($response);
echo $response->RESPONSE->RESPONSE_DATA->FILE_INFORMATION['Order_Number'];

//Returns
//object(SimpleXMLElement)#153 (4) { ["@attributes"]=> array(1)...the rest of the xml file...
//Order_Number

//This code returns error
$response = simplexml_load_string( $response );
var_dump($response);
echo $response->RESPONSE->RESPONSE_DATA->FILE_INFORMATION['Order_Number'];

//Returns
//object(SimpleXMLElement)#153 (1) { [0]=> string(33864) "" }
//Notice: Trying to get property of non-object in...

当使用simplexml\u load\u字符串而不是simplexml\u load\u文件时,什么会导致xml失败?

以下是xml文件的一个片段:

<?xml version="1.0" encoding="UTF-8"?>
<RESPONSE_GROUP>
    <RESPONSE>
        <RESPONSE_DATA>
            <FILE_INFORMATION Order_Number="19222835">
                ...
            </FILE_INFORMATION>
        </RESPONSE_DATA>
    </RESPONSE>
</RESPONSE_GROUP>

共有2个答案

胡玉书
2023-03-14

这对我很有用:

<?php

$response = '<?xml version="1.0" encoding="UTF-8"?>
<RESPONSE_GROUP>
    <RESPONSE>
        <RESPONSE_DATA>
            <FILE_INFORMATION Order_Number="19222835">
                ...
            </FILE_INFORMATION>
        </RESPONSE_DATA>
    </RESPONSE>
</RESPONSE_GROUP>';


//This code returns error
$response = simplexml_load_string( $response );
var_dump($response);
echo $response->RESPONSE->RESPONSE_DATA->FILE_INFORMATION['Order_Number'];


?>

输出:

object(SimpleXMLElement)#1 (1) {
  ["RESPONSE"]=>
  object(SimpleXMLElement)#2 (1) {
    ["RESPONSE_DATA"]=>
    object(SimpleXMLElement)#3 (1) {
      ["FILE_INFORMATION"]=>
      string(33) "
                ...
            "
    }
  }
}
19222835
陶腾
2023-03-14

你刚刚忽略了一个小细节。你对第一部分所说的是正确的:

$response = simplexml_load_file( "response.xml" );

这将从文件加载XML文档。然而,当你看第二部分:

$response = simplexml_load_string( $response );

您不能从字符串响应加载。$响应表示您刚刚从文件中创建的SimpleXMLElement。更“正确”的例子是:

$buffer   = file_get_contents( "response.xml" );
$response = simplexml_load_string( $buffer );

您可能只是因为变量重用而感到困惑(将相同的命名变量用于两个不同的东西)。

而更好的var_dump是检查与$响应-

 类似资料:
  • 问题内容: 我正在尝试制作更新表单,该表单将为选定的特定ID检索数据,并填写表单,以便其可用于更新。 当我单击特定条目(在我的情况下为Product)上的Edit时,它将带我到,但是对于我在表单元素中使用的每个变量,都显示错误 “试图获取非对象的属性”。 使用,我得到了正确的关联数组,因此正确传递了它。 这是我的摘录。 是包含所有键值对的数组,但由于某种原因我无法填写表格。 先感谢您! 问题答案:

  • 简单的代码不起作用!我一直在用if语句获取行上非object的属性时出错。我尝试像数组一样访问它,但收到一条消息说它不能以数组的形式访问stdClass。 $group的print\u r、var\u dump和dd可以给出: 使用$setting=$group\u可以- 返回错误不能使用stdClass类型的对象作为数组 laravel错误的详细信息如下: 可处理的例外情况- 编辑我删除了第一部

  • 这是我能言善辩的关系- 当我访问完整对象时- 我得到对象 但当我试图从对象中访问单个属性时- 我有错误 正在尝试获取非对象的属性'Office_Name'

  • 我将xml字符串转换成一个simpleXMLElement对象使用simplexml_load_string其值print_r输出 如何从这个对象中提取节点和属性值?使用 要获取正文的内容,节点未输出任何值 更新: XML字符串 是否同时提取节点值和属性

  • 我正在尝试解析一个JSON字符串。在解析之前,我将数据放入了JSON格式,但是我得到了一个“试图获取非对象属性”的错误。 下面是我的代码: 我的JSON字符串将如下所示: 有人能帮我找出我做错了什么吗?

  • 问题内容: 我试图从中获取数据: 但是如果我想使用以下代码获取player_name变量: 我得到错误: 注意:尝试在第9行+ var_dump()的** \ htdocs \ index.php中获取非对象的属性将返回:NULL 返回: 问题答案: 这是因为是对象的单元素数组,所以首先应访问作为对象的数组元素,然后访问其属性。 您粘贴的转储结果实际上很清楚地告诉了它。