Почему я не могу фильтровать результаты по значению атрибута, а не по индексу?
Что-то вроде этого терпит неудачу.
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 />'; }