php解析xml

一段xml如下,现用php解析成数组。

<GamesInfo>
    <game>
       <gameName>拖救跑车</gameName>
       <IssueTime>2011/2/14</IssueTime>
       <category>敏捷小游戏</category>
     </game>
     <game>
       <gameName>火柴人的激战</gameName>
       <IssueTime>2011/5/6</IssueTime>
      <category>射击小游戏</category>
    </game>
    <game>
      <gameName>魔鬼身材化装</gameName>
      <IssueTime>2011/1/25</IssueTime>
      <category>装扮小游戏</category>
    </game>
</GamesInfo>
方法1:DOMDocument

$xmlPath = "test.xml";
$doc = new DOMDocument();
$doc->load($xmlPath);

$games = $doc->getElementsByTagName("game");
$gameArr = array();
foreach ($games as $game) {
    //游戏名
    $gameNames = $game->getElementsByTagName("gameName");
    $gameName = $gameNames->item(0)->nodeValue;
    //时间
    $IssueTimes = $game->getElementsByTagName("IssueTime");
    $IssueTime = $IssueTimes->item(0)->nodeValue;
    //类别
    $categorys = $game->getElementsByTagName("category");
    $category = $categorys->item(0)->nodeValue;
    $gameArr[] = array(
        'gameName'=>$gameName,
        'IssueTime'=>$IssueTime,
        'category'=>$category
        );
}
print_r($gameArr);
方法2:simplexml

function xml2array($element, $arr = array()) {
    if (is_string($element)) {
        $element = (strlen($element) > 5 && substr($element, -4) === '.xml') ? simplexml_load_file($element) : simplexml_load_string($element);
    }
    $iter = 0;
    foreach ($element->children() as $b) {
        $a = $b->getName();
        if (!$b->children()) {
            $arr[$a] = trim($b[0]);
        } else {
            $arr[$a][$iter] = array();
            $arr[$a][$iter] = xml2array($b, $arr[$a][$iter]);
        }
        $iter++;
    }
    return $arr;
}

$xmlPath = "test.xml";
$arr = xml2array($xmlPath);
print_r($arr['game']);
方法3:正则

$xmlPath = "test.xml";
$xml = '';
$f = fopen($xmlPath, 'r');
while ($data = fread($f, 4096)) {
    $xml .= $data;
}
fclose($f);

preg_match_all("/\<game\>(.*?)\<\/game\>/s", $xml, $gameblocks);

foreach ($gameblocks[1] as $block) {
    preg_match_all("/\<gameName\>(.*?)\<\/gameName\>/", $block, $gameName);
    preg_match_all("/\<IssueTime\>(.*?)\<\/IssueTime\>/", $block, $IssueTime);
    preg_match_all("/\<category\>(.*?)\<\/category\>/", $block, $category);
    $arr[] = array('gameName'=>$gameName[1][0],
            'IssueTime'=>$IssueTime[1][0],
            'category'=>$category[1][0]
        );
}
print_r($arr);
以上均打印出:

Array
(
    [0] => Array
        (
            [gameName] => 拖救跑车
            [IssueTime] => 2011/2/14
            [category] => 敏捷小游戏
        )

    [1] => Array
        (
            [gameName] => 火柴人的激战
            [IssueTime] => 2011/5/6
            [category] => 射击小游戏
        )

    [2] => Array
        (
            [gameName] => 魔鬼身材化装
            [IssueTime] => 2011/1/25
            [category] => 装扮小游戏
        )

)

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值