Выбор значения атрибута в SimpleXML

Почему я не могу фильтровать результаты по значению атрибута, а не по индексу?

Что-то вроде этого терпит неудачу.

foreach ($portfolio->clientGroup[$id]->client['name=foo']->src as $src) { echo $src . '<br />'; } 

Но это работает.

 foreach ($portfolio->clientGroup[$id]->client[0]->src as $src) { echo $src . '<br />'; } 

Это не работает, потому что SimpleXML – это облегченная реализация. Кроме того, вы не можете приступать к работе, если у вас нет спецификации.

Вы ищете функцию xpath объектов SimpleXMLElement , то есть:

 foreach ($portfolio->clientGroup[$id]->xpath("client[@name='foo']/src") as $src) { echo $src . '<br />'; } 

SimpleXML обеспечивает доступ к вашему документу в виде вложенного массива. Невозможно разместить выражение XPath в качестве индекса массива.

Попробуйте что-нибудь вроде:

 $query = "client[@name='foo']/src"; // if name is an attribute $query = "client[name='foo']/src"; // if name is a child element foreach ($portfolio->clientGroup[$id]->xpath($query) as $src ) { echo $src . '<br />'; }