如何修复PHP注意事项:“;试图获取“中非对象的属性”;(解析XML)

如何修复PHP注意事项:“;试图获取“中非对象的属性”;(解析XML),php,xml,Php,Xml,我正在用PHP解析XML中的数据。我想显示它,但我收到通知:“试图在中获取非对象的属性”。它也不显示数据 我的PHP文件: <?php $xml = simplexml_load_file('file.xml'); for($i = 0; $i < 3; $i++) { $result = $xml->tittle->topic[$i]->name; } echo $result; ?> title是根元素,它将直接在$xml中找到,因此您可

我正在用PHP解析XML中的数据。我想显示它,但我收到通知:“试图在中获取非对象的属性”。它也不显示数据

我的PHP文件:

<?php 
$xml = simplexml_load_file('file.xml');

for($i = 0; $i < 3; $i++)
{
$result = $xml->tittle->topic[$i]->name;    
}

echo $result;

?>
  • title
    是根元素,它将直接在
    $xml
    中找到,因此您可以使用
    $xml->topic
    而不是
    $xml->title->topic

  • 不管数组中有多少元素,都应该循环数组中的所有元素,而不是硬编码

  • 结果如下所示:

    <?php
    
    $xml = simplexml_load_file('xml.xml');
    
    foreach ($xml->topic as $topic)
    {
        echo (string) $topic->name;
    }
    
    
    
  • title
    是根元素,它将直接在
    $xml
    中找到,因此您可以使用
    $xml->topic
    而不是
    $xml->title->topic

  • 不管数组中有多少元素,都应该循环数组中的所有元素,而不是硬编码

  • 结果如下所示:

    <?php
    
    $xml = simplexml_load_file('xml.xml');
    
    foreach ($xml->topic as $topic)
    {
        echo (string) $topic->name;
    }
    

    您可以使用下面的代码修复错误,只需删除“title”

    $xml=simplexml\u load\u文件('file.xml');
    对于($i=0;$i<3;$i++)
    {
    $result=$xml->topic->name;
    }
    回声$结果;
    
    您可以使用下面的代码修复错误,只需删除“title”

    $xml=simplexml\u load\u文件('file.xml');
    对于($i=0;$i<3;$i++)
    {
    $result=$xml->topic->name;
    }
    回声$结果;
    
    正如我在comments中所写的那样,
    simplexml\u load\u file
    返回的对象不包含根元素的属性。你需要把它从链子上删掉

    还有几点意见:

    • 循环会在每次迭代中覆盖
      $result
      ,因此只会得到最后一个节点。您可能希望
      $result
      成为一个数组
    • 您需要将SimpleXml节点转换为字符串(如果需要字符串)
    • 您希望有三个节点,但最好使其更具动态性,这样更改XML中的主题数量就不会破坏代码
    下面是我建议如何编写循环的代码:

    foreach($xml->topic as $topic) {
       $result[] = (string) $topic->name;    
    }
    

    现在,
    $result
    将有
    [“PHP”、“JS”、“CSS”]

    正如我在注释中所写的那样,
    simplexml\u load\u file
    返回的对象不包括根元素的属性。你需要把它从链子上删掉

    还有几点意见:

    • 循环会在每次迭代中覆盖
      $result
      ,因此只会得到最后一个节点。您可能希望
      $result
      成为一个数组
    • 您需要将SimpleXml节点转换为字符串(如果需要字符串)
    • 您希望有三个节点,但最好使其更具动态性,这样更改XML中的主题数量就不会破坏代码
    下面是我建议如何编写循环的代码:

    foreach($xml->topic as $topic) {
       $result[] = (string) $topic->name;    
    }
    

    现在
    $result
    将具有
    [“PHP”、“JS”、“CSS”]

    XML的根元素不是属性,您应该跳过它并执行
    $result=$XML->topic[$i]->nameXML的根元素不是属性,您应该跳过它并执行
    $result=$XML->topic[$i]->name
    
    foreach($xml->topic as $topic) {
       $result[] = (string) $topic->name;    
    }