Php SimpleXML中的属性值选择

Php SimpleXML中的属性值选择,php,xml,Php,Xml,为什么我不能根据属性值而不是索引过滤结果 像这样的事情失败了 foreach ($portfolio->clientGroup[$id]->client['name=foo']->src as $src) { echo $src . '<br />'; } foreach($portfolio->clientGroup[$id]->client['name=foo']->src as$src){ echo$src.“”; } 但这是可行的 foreach

为什么我不能根据属性值而不是索引过滤结果

像这样的事情失败了

foreach ($portfolio->clientGroup[$id]->client['name=foo']->src as $src) {
   echo $src . '<br />';
}
foreach($portfolio->clientGroup[$id]->client['name=foo']->src as$src){
echo$src.“
”; }
但这是可行的

foreach ($portfolio->clientGroup[$id]->client[0]->src as $src) {
   echo $src . '<br />';
}
foreach($portfolio->clientGroup[$id]->client[0]->src as$src){
echo$src.“
”; }
这不起作用,因为SimpleXML是一个轻量级实现。另外,除非你有一个规范,否则你不能假设任何东西都能工作

您正在查找
simplexmlement
对象的名称,即:

foreach ($portfolio->clientGroup[$id]->xpath("client[@name='foo']/src") as $src) {
   echo $src . '<br />';
}
foreach($portfolio->clientGroup[$id]->xpath(“client[@name='foo']]/src”)作为$src){
echo$src.“
”; }
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 />';
}
$query=“client[@name='foo']/src”//如果名称是一个属性
$query=“client[name='foo']/src”;//如果name是子元素
foreach($portfolio->clientGroup[$id]->xpath($query)作为$src){
echo$src.“
”; }
您确定“名称”选择了一个属性吗?好的,你需要在名字前面加一个“@”符号。darn编辑器使用“@”符号作为“Blockquote”之类的快捷方式。每次我按下“@”,它就会开始一个新行,我被迫在其他地方创建“@”,然后复制/粘贴它。令人沮丧的。我在这里搞错了。反问:你确定“name”不是属性的子项而不是属性吗?是(“为什么我不能筛选属性值而不是索引的结果?”)哦。我的浏览器字体似乎太小了。;-)不管怎样,我在答案中为这两种情况都添加了XPath表达式。FWIW,+1来自我。无论如何,你的回答比我的快了几秒钟。X-Ref: