有没有一种方法可以通过节点名称获取简单的XML子元素?

3
在 PHP 中,是否有现成的方法可以通过节点名(递归地)获取一个或多个子元素,还是您需要自己编写函数?例如,这是我的 XML:
<parent>
    <child>
        <grandchild>Jan</grandchild>
        <grandchild>Kees</grandchild>
    </child>
</parent>

我正在寻找一种返回如下结果的方法: Array( [0] => 'Jan', [1] => 'Kees' )
可以通过调用类似以下代码实现:
$grandchildren = $xml->children('grandchild');

根据文档,上述内容确实存在,但仅适用于命名空间。

e: 下面接受的答案有效。这是我运行测试的内容。

$xml = '
    <parent>
        <child>
            <grandchild>Jan</grandchild>
            <grandchild>Kees</grandchild>
        </child>
    </parent>';

$L_o_xml = new SimpleXMLElement($xml);

$L_o_child = $L_o_xml->xpath('//grandchild');

foreach( $L_o_child as $hi ){
   print "\n".(string)$hi;
}

简单的打印:

Jan
Kees
1个回答

7

您可以使用$xml->xpath()以多种复杂的方式选择节点:

$xml->xpath('//grandchild');   // select all  grandchild  elements in the document

谢谢,我刚试了一下。我使用了var_dump函数,可以看到它确实返回了一个包含两个对象的数组,但没有值。请问是否有办法获取元素的值? - vanamerongen
1
@vanamerongen 只需遍历元素并将每个元素转换为 string 以获取它们的值。 - JLRishe
也许是 $xml->xpath('//grandchild/text()') - JJoao
@JJoao 这仅适用于“grandchild”元素仅包含一个文本节点且没有其他内容的假设下。 - JLRishe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接