Использование xpath:
function has_child(\SimpleXMLElement $parent=null, string $xpathToChild)
{
return isset($parent) && !empty($parent->xpath('('.$xpathToChild.')[1]'));
}
где $parent
является косвенным или прямым родителем проверяемого дочернего узла, а $xpathToChild
является xpath дочернего элемента относительно $parent
.
()[1]
потому что мы не хотим выбирать все дочерние узлы. Одного достаточно.
Чтобы проверить, существует ли $ a-> b-> c:
has_child($a,'b/c');
Вы также можете проверить атрибуты. Чтобы проверить, имеет ли узел c
атрибут t
.
has_child($a,'b/c/@t');