【问题标题】:Trying to get property of non-object -> xml试图获取非对象的属性-> xml
【发布时间】:2014-12-14 20:24:21
【问题描述】:

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

如何获取 Email 和 Customer 的价值?

【问题讨论】:

    标签: php arrays xml object


    【解决方案1】:

    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);

    【讨论】:

    • 完全不建议,但它就在这里,看看它是多么容易。 =) 喜欢它
    【解决方案2】:

    您的$xml 是一个字符串。 $xml-&gt; 访问对象的属性。那是不兼容的。 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多