我正在检索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
如何获得电子邮件和客户的价值?
答案 0 :(得分:3)
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
如果您只想要第一封邮件,也可以用$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);