尝试获取非对象 -> xml 的属性



我正在检索一个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

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

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如果您只想要第一封邮件,foreach也可以用$email = reset($emails);代替。

您的$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);

最新更新