Laravel 4 / SimpleXML / PHP节点不再存在

时间:2013-08-18 14:29:14

标签: php xml laravel simplexml laravel-4

我目前有问题,我的laravel网站返回错误。我正在使用以下代码:

    @extends('base')
@section('title', 'Experience stages')
@stop
@section('main')

<div class="container">
  <div class="doc-content-box">

    <legend>Experience stages</legend>


    <?php   

    $stagesdir = 'C:\Users\E1\Desktop\theforgottenserver-v0.2.15-win64console\Mystic Spirit\data\XML';   

    if(is_dir($stagesdir)) {   
      $list = simplexml_load_file($stagesdir.'\stages.xml'); 

      ?> 
      <table class="table table-striped">

        <thead>
            <tr>
                <th>From Level</th>
                <th>To Level</th>
                <th>Experience multiplier</th>
            </tr>
        </thead>

      <tbody>
        <?php  
        foreach($list->children() as $stage) {  
            if ($stage['maxlevel'] == '') { 
        $stage['maxlevel'] = '*';     
        } 
            echo '  
            <tr>  
            <td>'.$stage['minlevel'].'</td>
            <td>'.$stage['maxlevel'].'</td>  
            <td style="width: 30%">'.$stage['multiplier'].'x</td>    
            </tr>';
        }  
      }
      else{
        echo '<div class="alert alert-danger"><span class="label label-important">Error parsing your Monsters XML file</span><br /><br /> Invalid path!</div> ';
      }  
      ?>  
    </tbody>

  </table> 

</div>
</div>

@stop

在那个foreach中,我不想使用$list->world->children()但它对我不起作用。当我尝试运行我的页面时,出现以下错误:

main(): Node no longer exists

此外,这是我的XML文件:http://paste.laravel.com/Koh

我可以在没有->world的情况下使用它,但是,正如您在我的XML文件中看到的那样,它在我的表格中就像<td>

1 个答案:

答案 0 :(得分:1)

啊,我看到了你的问题;你试图从第一个子元素<config>获取属性(maxlevel等),并且元素只有一个'enabled'属性。 试试这个;

<?php
$xml = '<stages>
<config enabled="0"/>
<stage minlevel="1" maxlevel="8" multiplier="7"/>
<stage minlevel="9" maxlevel="20" multiplier="6"/>
<stage minlevel="21" maxlevel="50" multiplier="5"/>
<stage minlevel="51" maxlevel="100" multiplier="4"/>
<stage minlevel="101" multiplier="5"/>
</stages>';
$list = simplexml_load_string($xml);

echo "<pre>";
foreach($list->children() as $child)
{
    switch($child->getName())
    {
        case 'config':
            echo 'Config->enabled: ';
            echo (string)$child['enabled'];
            echo "\n";
            break;
        case 'stage':
            echo 'Stage->minlevel: ';
            echo (string)$child['minlevel'];
            echo "\n";
            break;
    }
}