代码之家  ›  专栏  ›  技术社区  ›  mrpatg

用PHP浏览这个XML结构

  •  0
  • mrpatg  · 技术社区  · 16 年前

    我试图循环并显示来自以下XML结构的信息。

    <users_list>
      −<users type="array">
        +<user>
          <id>Blah</id>
        </user>
        +<user></user>
        +<user></user>
      </users>
      <next_link>6</next_link>
      <prev_link>4</prev_link>
    </users_list>
    

    我使用下面的PHP来获取节点。

            $xml = simplexml_load_string($rawxml);
            foreach($xml->users_list AS $key){
                $name = $key->users->user->{"id"};
            }
                $next = $key->{"next_link"};
                $prev = $key->{"prev_link"};
    

    我试过一些变种,但没有看到任何效果。我要么在回显变量时什么也得不到,要么在 foreach 功能

    3 回复  |  直到 12 年前
        1
  •  2
  •   Josh Davis    16 年前

    使用simpleXML时,应始终在变量所包含的根节点之后命名变量,这使事情变得简单和明显:

    $users_list = simplexml_load_string(
        '<users_list>
          <users type="array">
            <user>
              <id>Blah</id>
            </user>
            <user></user>
            <user></user>
          </users>
          <next_link>6</next_link>
          <prev_link>4</prev_link>
        </users_list>'
    );
    
    foreach ($users_list->users->user as $user)
    {
        echo "User ", $user->id, "\n";
    }
    
    echo "next: ", $users_list->next_link, "\n";
    echo "prev: ", $users_list->prev_link, "\n";
    
        2
  •  2
  •   nash George D Girton    16 年前

    在PHP中进行故障排除时, var_dump print_r 是你的朋友!

    如果希望像数组一样浏览结果,则将其强制转换为数组。

    $value = (array) $value;

    我做了以下工作:

    $xmlStr = '<users_list>
    <users type="array">
    <user>
    <id>Blah</id>
    </user>
    <user></user>
    <user></user>
    </users>
    <next_link>6</next_link>
    <prev_link>4</prev_link>
    </users_list>';
    
    $xml = simplexml_load_string($xmlStr); 
    
    foreach($xml->users->user AS $key=>$value){
        $value = (array) $value;
        $name = $value["id"];
        var_dump($name);
    }   
    

    其输出:

    string(4) "Blah"
    NULL
    NULL
    

    有关simpleXML的更多信息,请查看php帮助文档。

        3
  •  0
  •   Les    16 年前

    print_r($xml) 应该给你所有你需要的信息。 您可能会发现实际数组是$xml->用户列表->用户->用户, 同时铸造有助于节省时间

    foreach($xml->user_list->users->user as $value) {
      $name = (string) $value->id;
    }
    
    推荐文章