Аргументом ->children()
всегда является идентификатор пространства имен или локальный префикс, а не имя тега.Если бы эти элементы находились в «пространстве имен», вы бы получили к ним доступ с помощью ->children('')
.
Однако элементы без префикса в этом документе не имеют пространства имен - они находятся в пространстве имен по умолчанию, в данном случае urn:ehd/go/001
(как определено xmlns="urn:ehd/go/001"
).
Если вы используете полные идентификаторы пространства имен, а не префиксы (которые также менее вероятно сломаютсяесли фид изменяется), вы сможете легко получить к ним доступ:
$xml = simplexml_load_file($file) or die("Failed to load");
$ehd = $xml->children('urn:ehd/001')->body;
$gnr_liste = $ehd->children('urn:ehd/go/001')->gnr_liste;
foreach ( $gnr_liste->gnr as $gnr ) {
simplexml_dump($gnr);
}
Возможно, вы захотите дать свои собственные имена пространствам имен, чтобы вам не приходилось использовать полные URI, но не 't зависит от префиксов, с которыми генерируется XML;Общий подход заключается в определении констант:
const XMLNS_EHD_MAIN = 'urn:ehd/001';
const XMLNS_EHD_GNR = 'urn:ehd/go/001';
$xml = simplexml_load_file($file) or die("Failed to load");
$ehd = $xml->children(XMLNS_EHD_MAIN)->body;
$gnr_liste = $ehd->children(XMLNS_EHD_GNR)->gnr_liste;
foreach ( $gnr_liste->gnr as $gnr ) {
simplexml_dump($gnr);
}