С такой глубокой иерархией трудно ориентироваться, используя обычную структуру ->
, но вы также должны быть осторожны при изменении пространства имен.Вам нужно только сделать ->children('srw', true)
один раз, и тогда все дочерние узлы будут для этого пространства имен.НО вы также должны переключиться обратно на <responseRecord>
, используя ->children()
.
. Вы также должны быть осторожны, чтобы использовать правильный регистр для каждого имени тега ...
$org_names = $xml->children('srw', true)->records->record->recordData->children()->
responseRecord->ISNIAssigned->ISNIMetadata->identity->organisation->
organisationNameVariant->mainName;
echo (string)$org_names;
Альтернативой является использование XPath (поскольку xpath()
возвращает список совпадений, я использую [0]
, чтобы использовать только первое) ...
$org_names = $xml->xpath("//organisationNameVariant/mainName");
echo (string)$org_names[0];
Я знаю, что echo
приводит кзначение в строку, но если вы используете это в любом другом сценарии, вы можете вместо этого получить SimpleXMLElement, поэтому я склоняюсь к добавлению регистра в строку просто для того, чтобы подчеркнуть это.