A->b->c
可能存在,但c
可能不存在。 我该如何检查呢?
Answer 1:
if($A->b->c != null) //c exists
如果c
不存在,它的价值将是null
(或者,更准确地说,它没有任何价值)。 但是请注意,对于这个工作,无论是A
和b
需要不能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');
您还可以检查属性。 要检查是否节点c
有t
的属性。
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
}