试图获得非对象的属性 - > XML

时间:2014-10-19 21:43:27

标签: php arrays xml object

我正在检索xml:

$xml = file_get_contents($query);

echo $xml->Email;
echo $xml[0]->Email;

xml(echo $ xml)如下所示:

<GetUserInfo>
<Customer>TestUser</Customer>
<Email>test@test.com</Balance>
</GetUserInfo>

但这两种方法都会产生以下错误:

Notice: Trying to get property of non-object in test.php on line 86

Notice: Trying to get property of non-object in test.php on line 87

如何获得电子邮件和客户的价值?

2 个答案:

答案 0 :(得分:3)

file_get_contents()返回文件内容,而不是对象。如果您想坚持使用字符串内容(完全不建议),则只能使用preg_match

preg_match('~<Email>([^<]+)</Email>~i', file_get_contents($__filePath__), $emails);

我建议使用DOMDocumentDOMXPath(未经过测试的代码):

$XMLDoc = new DOMDocument();
$XMLDoc->load($__filePath__);
$XPath = new DOMXPath($XMLDoc);
$emails = $XPath->query('//email');
foreach ($emails as $email)
    var_dump($email->nodeValue);

您可以使用其他Xpath表达式,例如//email[1]/GetUserInfo/Email 如果您只想要第一封邮件,也可以用$email = reset($emails);替换foreach。

答案 1 :(得分:3)

您的$xml是一个字符串。 $xml->访问对象的属性。这是不兼容的。 php字符串不是对象。

您可能希望使用var_dump()代替echo()来查看变量的所有详细信息。

对象转换器的简单字符串是simplexml_load_string()

$xml='
<GetUserInfo>
<Customer>TestUser</Customer>
<Email>test@test.com</Email>
</GetUserInfo>
';

var_dump($xml);
$Xml = simplexml_load_string($xml);
var_dump($Xml);
echo($Xml->Email);