需要帮助获取子节点

时间:2012-04-30 19:19:05

标签: php xml xml-parsing simplexml nodes

我正在读取我的XML并循环遍历子节点,当我将它移动到另一台服务器时,它停止工作,任何关于它为什么会停止的想法......

这是XML:

<masterxmlholder>   
    <userinfo login="user1">
    <rde-idea:lastlogin code="0">Wed Dec 31 17:00:00 MST 1969</rde-idea:lastlogin>
    </userinfo>

    <userinfo login="user2">
    <rde-idea:lastlogin code="4564568522258">Wed Dec 31 17:00:00 MST 1969</rde-idea:lastlogin>
    </userinfo>
</masterxmlholder>

这是我想用

来找孩子的循环
foreach ($xml->children() as $user) {
    echo '<tr><td> Name :  </td><td>' . $user['login'] . $user->lastlogin '</td><td>';

}
echo '</table></center>';

现在我可以从每个子节点获取name属性,但是我无法显示任何子节点的内部节点

这一切都是为了让你知道我想要做什么......但它基本上是为了看看我是如何尝试访问子节点并且可能指出我的缺陷。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

lastlogin信息实际上是userinfo节点的子节点,因此您需要再次使用children()方法来检索信息。请注意,在此示例中,我删除了XML命名空间,以便初始化$xml

$xmlstring = <<<XML
<masterxmlholder>   
    <userinfo login="user1">
    <lastlogin code="0">Wed Dec 31 17:00:00 MST 1969</lastlogin>
    </userinfo>

    <userinfo login="user2">
    <lastlogin code="4564568522258">Wed Dec 31 17:00:00 MST 1969</lastlogin>
    </userinfo>
</masterxmlholder>
XML;

$xml = new SimpleXMLElement($xmlstring);
echo '<center><table>';

foreach ($xml->children() as $user) {
    $name = $user['login'];
    foreach ($user->children() as $child ) {
       $lastlogin = $child;
    }
    echo '<tr><td> Name :  </td><td>' . $name . $lastlogin . '</td></tr>';
}
echo '</table></center>';

我在这里测试了代码:http://writecodeonline.com/php/

旁注,我不会使用center标签,因为这是将演示文稿与内容混合在一起,这是不赞成的。考虑使用CSS来设置表格的样式和位置。