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] => 装扮小游戏
)
)
(完)
<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解析JSON与XML
- PHP 递归解析XML 查找XML节点内容 显示XML节点名称和值
- php 解析xml 的四种方法(转)
- PHP XML操作的各种方法解析
- php 解析xml
- php解析xml的四种方法
- PHP XML操作的各种方法解析(比较详细)
- 几种php解析xml方式
- php:PHP解析xml的4种方法
- 解析php DOMElement 操作xml 文档的实现代码
- php中SimpleXML的使用方法,加载XML,解析XML
- PHP解析和生成xml(DOMDocument版)
- PHP解析JSON与XML(简介)
- php 处理 xml 之 解析
- php 解析xml 的四种方法(转)
- PHP解析XML
- php 解析xml
- PHP简单实现解析xml为数组的方法
- php实现解析xml文档
- php 解析xml 的四种方法(转)