Using simplexml to get a node (and its children) by attribute
Using simplexml, is it possible to get the children of a node based on the parent's attributes. For example, I want to get a list of the variants in myItem1 (output would be small, large)
Here is some psuedo code of what I'm after:
foreach($xml->xpath('//family[@name="myItem1"]')->variants->children() as $child) {
$child->getName()
}
(Of course this doesn't work, but hopefully it describes what I'm trying to do.)
Sample XML:
<library>
<family name="myItem1">
<variants>
<small>
...
</small>
<large>
...
</large>
</variants>
</family>
<fam开发者_运维知识库ily name="myItem2">
<variants>
<small>
...
</small>
<medium>
...
</medium>
</variants>
</family>
</library>
Thank you.
If I understand correctly, you want to get the names of all the children of a given node. There are various way to do it, one of them is to iterate over all the children, like this:
foreach ($xml->xpath('//family[@name="myItem1"]') as $family)
{
$variants = array();
foreach ($family->variants->children() as $name => $node)
{
$variants[] = $name;
}
// in case there are duplicates you can do
$variants = array_unique($variants);
var_dump($variants);
}
Try the following XPath expression:
//family[@name="myItem1"]/variants/*
精彩评论