Selecting attribute values based on another attrib

2019-07-22 03:01发布

This question already has an answer here:

I'm trying to display an image using an xml file and SimpleXML

The XML code is

<icons>
  <icon size="tiny"    href="/FF02-tiny.jpg"    />
  <icon size="sidebar" href="/FF02-sidebar.jpg" />
  <icon size="full"    href="/FF02-full.jpg"    />
</icons>

I want to get the href attribute for the size="full" line.

I've tried

icons->icon->attributes()->href

but this just gives me the first 'tiny' size. I know I should be using xpath but I am lost.

2条回答
女痞
2楼-- · 2019-07-22 03:29

Yes, you can select the attribute node with an xpath expression:

list($iconHref) = $xml->xpath("//icon[@size='full']/@href");
echo $iconHref;
查看更多
你好瞎i
3楼-- · 2019-07-22 03:35

$icons->icon will give you a SimpleXMLElement object that gives access to all icon child-elements of the $icons object.

From there you need to select which icon you want to get the attribute for. That works with array-like access and a numeric value for the zero-index child element and a string value for the attribute:

// specify what icon you want (third)
// and the attribute (href)
$icons->icon[2]['href'];

You find that documented in the PHP manual with the SimpleXML basic examples (Example #3 and Example #5).

However this does not work if the position of the element you look for changes. So it's suggested that you use a more specific xpath-expression instead.

查看更多
登录 后发表回答