PHP5:迭代子节点列表(相当于child_nodes())?

时间:2009-08-09 19:25:14

标签: php xml

所有

我有一个类似于这样的XML文档:

<root>
    <profile>
        <childA>
        <childB>
        <childC>
    <profile>
    <blah>
    <blah>
    <foo>
    <bar>
<root>

我希望能够抓住'profile'节点,然后遍历它的子节点('childA','childB'等)

到目前为止,我的代码看起来像这样:

$doc = new DomDocument();
$doc->loadXML(file_get_contents("php://input"));
$profile_node = $doc->getElementsByTagName("profile")->item(0);

到目前为止,这么好。 $ profile_node有我想要的。

在PHP4中,我猜你会做这样的事情:

$childnodes = $profile_node->child_nodes();
foreach ($childnodes as $node) {
    // do something with this node
}

但是,我在PHP5中找不到child_nodes()的等价物。

由于我几乎是关于PHP的菜鸟,我真的很感激代码示例,所以我可以看到确切的语法。

2 个答案:

答案 0 :(得分:4)

根据php manual,DomNode类有一个public $ childNodes变量。您可以直接访问它:

foreach ($profile_node->childNodes as $node) {
    // do something with this node
}

答案 1 :(得分:1)

如果您只需要阅读,我建议使用simplexml包:

$xml = simplexml_load_file('php://input');
$childnodes = $xml->xpath("//profile/child::*");
foreach($childnodes as $node){
  // do something
}

SimpleXML包和DOM包是可以互换的:您可以使用dom_import_simplexml()将SimpleXML导入DOM对象。