Ваш документ содержит (как минимум) два пространства имен: одно с локальным префиксом m
, а другое без префикса («пространство имен по умолчанию»).На самом деле он может содержать другие пространства имен, которые вы не показывали, или переназначить префикс m:
и пространство имен по умолчанию в разных точках документа, но в фрагменте, который вы показали :
- Элемент
inline
находится в пространстве имен с локальным префиксом m
- Элементы
link
, feed
и title
находятся в пространстве имен по умолчанию - Различные атрибуты вообще не находятся в пространстве имен ;странно, это не то же самое, что они в пространстве имен по умолчанию.
Как обсуждено в " Справочник - как мне обрабатывать пространства имен (теги и атрибуты с двоеточием в) в SimpleXML? "метод ->children()
переключает пространства имен , поэтому:
- Чтобы выбрать элемент
inline
, вы должны использовать ->children('m', true)->inline
- Toвыберите элемент
feed
внутри него, вам нужно переключить назад в пространство имен по умолчанию, используя ->children(null, true)->feed
- Чтобы получить доступ к элементу
title
внутри него, вы уже будете впространство имен по умолчанию, поэтому можно просто использовать ->title
- В данном конкретном случае не имеет значения, находитесь ли вы в пространстве имен по умолчанию или «нет пространства имен», поэтому к атрибуту
type
можно получить прямой доступс ['type']
- Не забудьте привести любой атрибут или элемент к строке, чтобы получить их строковое содержимое
Подведем итог:
$type = (string)$simpleXmlElement
->children('m', true)
->inline
->children(null, true)
->feed
->title
['type'];
Обратите внимание, что в идеале вы 'd жестко закодировать URI пространства имен, которые не подлежат изменению, а непрефиксы.Вы также можете избежать предположения о том, какое пространство имен используется по умолчанию, и явно выбирать пустое пространство имен при выборе атрибутов.Это даст вам что-то вроде этого:
$type = (string)$simpleXmlElement
->children(XMLNS_SOMETHING)
->inline
->children(XMLNS_OTHER_THING)
->feed
->title
->attributes(null)
->type;