多元素XML解析故障:无法正确提取各分类对应的游戏ID
解决XML分类下游戏ID重复提取问题
问题根源
你的代码提取游戏ID时,没有针对当前遍历的分类节点筛选对应游戏,而是直接全局获取所有<game-id>节点,导致每个分类都输出全部游戏ID,出现重复。
修正方案
核心思路
遍历各分类节点时,从当前节点内部查找下属的<game-id>,而非全局获取,确保每个分类只拿到自身对应的游戏ID,再按格式导出到文本文件。
修正后的代码示例
<?php // 加载XML文件 $xml = simplexml_load_file('your_xml_file.xml'); if (!$xml) { die('XML文件加载失败'); } $outputContent = ''; // 处理all-games分类 $allGames = $xml->{'all-games'}; $outputContent .= "=== all-games ===\n"; foreach ($allGames->{'game-id'} as $gameId) { $outputContent .= (string)$gameId . "\n"; } $outputContent .= "\n"; // 处理所有genre分类 foreach ($xml->genre as $genreNode) { $genreTitle = (string)$genreNode['title']; $outputContent .= "=== {$genreTitle} ===\n"; foreach ($genreNode->{'game-id'} as $gameId) { $outputContent .= (string)$gameId . "\n"; } $outputContent .= "\n"; } // 处理rating-hit分类 $ratingHit = $xml->{'rating-hit'}; $outputContent .= "=== rating-hit ===\n"; foreach ($ratingHit->{'game-id'} as $gameId) { $outputContent .= (string)$gameId . "\n"; } // 写入文本文件 file_put_contents('game_category_ids.txt', $outputContent); echo '分类及ID已成功导出'; ?>
关键说明
- 带连字符的节点名(如
all-games、game-id)需用{'节点名'}的方式访问,避免PHP语法解析错误。 - 必须通过当前分类节点(如
$genreNode->{'game-id'})获取下属游戏ID,而非直接调用$xml->{'game-id'},这是解决重复问题的核心。 - 替换代码中的
your_xml_file.xml为你的实际XML文件路径。
内容的提问来源于stack exchange,提问作者Rick Scorpio
相关产品推荐
相关产品推荐

