2009-02-15 90 views
1

爲什麼我不能過濾屬性值而不是索引的結果?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 />'; 
} 
+0

X-文獻:[SimpleXML的:選擇具有一定屬性的元素值(2009年6月)](http://stackoverflow.com/q/992450/367456) – hakre 2013-07-09 09:43:03

回答

2

這不起作用,因爲SimpleXML是一個輕量級實現。另外,除非你有規範,否則你不能假設任何東西工作。

您正在尋找SimpleXMLElementxpath function的對象,即:

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

反問:你確定「名字」不是的孩子,而不是屬性? – Tomalak 2009-02-15 17:54:56

+0

是(「爲什麼我不能在*屬性值*而不是索引上過濾結果?」) – phihag 2009-02-15 18:33:55

1

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 />'; 
}