PHP的SimpleXML检查是否存在儿童(php SimpleXML check if a chi

2019-07-23 03:49发布

A->b->c可能存在,但c可能不存在。 我该如何检查呢?

Answer 1:

if($A->b->c != null) //c exists

如果c不存在,它的价值将是null (或者,更准确地说,它没有任何价值)。 但是请注意,对于这个工作,无论是Ab需要不能null 。 否则,PHP将抛出一个错误(我认为)。



Answer 2:

这可能是更好的在包装这个isset()

if(isset($A->b->c)) { // c exists

如果这样, $A$A->b不存在......它不会炸毁。



Answer 3:

SimpleXML的总是返回对象。 如果没有孩子,则返回空对象。

if( !empty($a->b)){
  var_dump($a->b);
}


Answer 4:

我通过解决它children()函数,做一个count()就可以了,如果没有孩子通过把一个@计,调用之前忽略的PHP错误。 这是愚蠢的,但它的工作原理:

$identification = $xml->identification;
if (@count($identification->children()) == 0)
  $identification = $xml->Identification;

我讨厌这个...



Answer 5:

一些实验后,我发现,检查是否节点存在的唯一可靠的方法是使用count($xml->someNode)

这是一个测试案例: https://gist.github.com/Thinkscape/6262156



Answer 6:

方法XPath返回匹配的元素或假的阵列

if(false !== $A->xpath('b/c')) { ...

http://www.php.net/manual/ru/simplexmlelement.xpath.php



Answer 7:

如果你有PHP 5.3,你可以用$a->count() 否则,使用scippie的解决方案@count($a->children())效果很好。 我觉得我不需要@但旧的PHP实现可能需要它。



Answer 8:

使用if(isset($A->b){给了我的问题,所以我想if($A->b){和它的工作!



Answer 9:

只是

var_dump(count($xml->node));


Answer 10:

使用XPath:

function has_child(\SimpleXMLElement $parent=null, string $xpathToChild)
{
    return isset($parent) && !empty($parent->xpath('('.$xpathToChild.')[1]'));
}

其中$parent为子节点的间接或直接的家长检查和$xpathToChild相对于孩子的XPath $parent

()[1]是因为我们不想选择所有的子节点。 一个就够了。

要检查是否$ A-> B->Ç存在:

has_child($a,'b/c');

您还可以检查属性。 要检查是否节点ct的属性。

has_child($a,'b/c/@t');


Answer 11:

3种方式,我可以在PHP 5.5.23确认工作用isset() count()empty()

下面是一个脚本来显示从每个结果:

https://gist.github.com/mchelen/306f4f31f21c02cb0c24



Answer 12:

我用一个辅助函数来检查,如果一个节点是在函数中的参数提供了有效的节点。

private static function isValidNode($node) {
  return isset($node) && $node instanceof SimpleXMLElement && !empty($node);
}

用法示例:

public function getIdFromNode($node) {
  if (!self::isValidNode($node)) {
    return 0;
  }
  return (int)$node['id'];
}


Answer 13:

你可以试试:

if($A->b->c && $A->b->c != '')


Answer 14:

想我会分享我的经验。 运行在5.4我试图用“isset”和“空”测试,但没有为我工作。 我结束了使用is_null。

if(!is_null($xml->scheduler->outterList->innerList)) {
    //do something
}


Answer 15:

名字空间

请注意,如果您使用的名称空间在XML文件中,您将需要包括那些在你的函数调用检查孩子时否则将每次返回零:

if ($XMLelement->children($nameSpace,TRUE)->count()){
    //do something here 
}


文章来源: php SimpleXML check if a child exists
标签: php simplexml