Выбор значений атрибутов на основе другого значения атрибута с помощью SimpleXML

Я пытаюсь показать изображение с помощью xml-файла и SimpleXML

XML-код

<icons> <icon size="tiny" href="/FF02-tiny.jpg" /> <icon size="sidebar" href="/FF02-sidebar.jpg" /> <icon size="full" href="/FF02-full.jpg" /> </icons> 

Я хочу получить атрибут href для строки size="full" .

я пробовал

 icons->icon->attributes()->href 

но это только дает мне первый 'tiny' размер. Я знаю, что должен использовать xpath, но я потерян.

$icons->icon даст вам объект SimpleXMLElement который дает доступ ко всем дочерним элементам $icons объекта $icons .

Оттуда вам нужно выбрать, какой значок вы хотите получить для этого атрибута. Это работает с доступом, подобным массиву, и числовым значением для дочернего элемента с нулевым индексом и строковым значением для атрибута:

 // specify what icon you want (third) // and the attribute (href) $icons->icon[2]['href']; 

Вы обнаружите, что это описано в руководстве по PHP с базовыми примерами SimpleXML ( пример №3 и пример № 5 ).

Однако это не работает, если позиция элемента, который вы ищете, изменяется. Поэтому предлагается использовать вместо этого более специфическое xpath-выражение .

Да, вы можете выбрать узел атрибута с выражением xpath:

 list($iconHref) = $xml->xpath("//icon[@size='full']/@href"); echo $iconHref;