您的位置:首页 > 编程语言 > PHP开发

php解析xml

2013-12-20 00:43 399 查看
一段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] => 装扮小游戏
)

)

(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php