我正在检索一个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);
我建议使用DOMDocument
和DOMXPath
(代码未测试):
$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);