使用simplexml按属性获取节点(及其子节点)

时间:2010-01-25 02:21:26

标签: php xml simplexml

使用simplexml,是否可以根据父级的属性获取节点的子节点。例如,我想获得myItem1中变体的列表(输出将是小的,大的)

以下是我所追求的一些伪代码:

foreach($xml->xpath('//family[@name="myItem1"]')->variants->children() as $child) {
    $child->getName()
}

(当然这不起作用,但希望它描述了我正在尝试做的事情。)

示例XML:

<library>
 <family name="myItem1">
   <variants>
    <small>
     ...
    </small>
    <large>
     ...
    </large>    
   </variants>
 </family>
 <family name="myItem2">
   <variants>
    <small>
     ...
    </small>
    <medium>
     ...
    </medium>   
   </variants>
 </family>
</library>

谢谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望获取给定节点的所有子节点的名称。有各种方法可以做到这一点,其中之一是迭代所有孩子,如下:

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);
}

答案 1 :(得分:0)

尝试以下XPath表达式:

//family[@name="myItem1"]/variants/*