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

Php 使用simplexml按属性获取节点(及其子节点),php,xml,simplexml,Php,Xml,Simplexml,使用simplexml,可以根据父节点的属性获取节点的子节点。例如,我想在myItem1中获得一个变量列表(输出可能是小的,也可能是大的) 以下是我所追求的一些psuedo代码: foreach($xml->xpath('//family[@name="myItem1"]')->variants->children() as $child) { $child->getName() } (当然这不起作用,但希望它描述了我正在尝试做的事情。) 示例XML: <

使用simplexml,可以根据父节点的属性获取节点的子节点。例如,我想在myItem1中获得一个变量列表(输出可能是小的,也可能是大的)

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

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>

...
...
...
...

谢谢。

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

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

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

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

请尝试以下XPath表达式:

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

请尝试以下XPath表达式:

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

它并没有真正描述你想要达到的目标。请发布一个示例XML文档和几个“变体”的示例。对不起,我的帖子格式不正确。它现在正在显示。它的可能副本并不能真正描述您想要实现的目标。请发布一个示例XML文档和几个“变体”的示例。对不起,我的帖子格式不正确。现在正在显示。可能是的副本