2009-02-15 94 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 />'; 
}