【问题标题】:Node No Longer Exists in SimpleXMLSimpleXML 中不再存在节点
【发布时间】:2011-03-30 04:27:18
【问题描述】:

我有一个似乎无法解决的问题。当$array 为空时,下面的代码将返回一个php 错误“Node 不再存在”。如果$array 不为空,则可以正常工作。当$array 为空时,错误将显示在$prinid = $array[0]; 行。

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

foreach($doc as $a => $b) {
    if ($a == 'principal-list') {
        $array = $b->principal->attributes();
    }
}

$prinid = $array[0];

if (isset($array[0])) {
    $currentuser = 1;
} else {
    $currentuser = 0;
}

更新:

这是我现在拥有的,我得到了:

警告:count() [function.count]:* * * * * * * 中不再存在节点

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

foreach($doc as $a => $b) {
    if ($a == 'principal-list') {
        $array = $b->principal->attributes();
    }
}

$currentuser = 0;
if (isset($array) && count($array) > 0) {
    $prinid = $array[0];
    $currentuser = 1;
}

【问题讨论】:

  • 您到底想完成什么?可能有更好的方法来布置你的代码来做这件事,它也有助于提高可读性。

标签: php xml simplexml


【解决方案1】:

这意味着您尝试获取的属性不存在。您应该检查该数组是否为空

if (isset($array) && count($array) > 0)
    $prinid = $array[0];

【讨论】:

    【解决方案2】:
    if ($a == 'principal-list' && $b && $b->principal) {
        $array = $b->principal->attributes();
    }
    

    重要的事情——检查$b->principal——你需要检查这个xml对象是否为空。如果是真的,那么在任何尝试解决 $b->principal->attributes() 时都会收到此错误。

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多