PHP需要获取XML解析阿里巴巴的产品分类信息的XML,但是这个XML文件是这样的格式的,全部都是category 的标签。而simple html dom 这个类和 DOMDOCUMENT 这两个都是只有getElementsByTagName() 这个方法来获取,而不能层层获取。XML文件内容格式如下六层category,需要使用PHP读取后存入数据库表 @#__cat 中。<?xml version="1.0" encoding="GBK"?>
<root>
<category superId="0">
<category id="58" leaf="false" name="照明工业">
<category superId="58">
<category id="10219" leaf="false" name="白炽灯">
<category superId="10219">
<category id="1032285" leaf="true" name="彩色灯泡"/>
<category id="1032279" leaf="true" name="卤钨灯泡"/>
<category id="1032283" leaf="true" name="摄影灯泡"/>
<category id="1035280" leaf="true" name="普通照明白炽灯"/>
<category id="1035279" leaf="true" name="微型灯泡"/>
<category id="1035278" leaf="true" name="聚光灯泡"/>
<category id="1035277" leaf="true" name="水下灯泡"/>
<category id="1035276" leaf="true" name="无影灯"/>
<category id="1035275" leaf="true" name="红外线灯泡"/>
<category id="1035274" leaf="true" name="指示灯泡"/>
<category id="1035273" leaf="true" name="其他白炽灯"/>
</category>
</category>
<category id="527" leaf="false" name="气体放电灯">
<category superId="527">
<category id="10222" leaf="true" name="氙气灯"/>
<category id="10224" leaf="true" name="U型荧光灯管"/>
<category id="1032286" leaf="true" name="冷阴极荧光灯"/>
<category id="1032282" leaf="true" name="霓虹灯管"/>
<category id="1032281" leaf="true" name="直型荧光灯管"/>
<category id="1032280" leaf="true" name="环型荧光灯管"/>
<category id="1032277" leaf="true" name="钠灯"/>
<category id="1032276" leaf="true" name="汞灯"/>
<category id="1032275" leaf="true" name="金卤灯"/>
<category id="1032274" leaf="true" name="氖灯"/>
<category id="1032273" leaf="true" name="紫外线灯管"/>
<category id="1032269" leaf="true" name="螺旋型荧光灯管"/>
<category id="1032266" leaf="true" name="其他气体放电灯"/>
</category>
</category>
</category>
</category>
</category>
</root>
<root>
<category superId="0">
<category id="58" leaf="false" name="照明工业">
<category superId="58">
<category id="10219" leaf="false" name="白炽灯">
<category superId="10219">
<category id="1032285" leaf="true" name="彩色灯泡"/>
<category id="1032279" leaf="true" name="卤钨灯泡"/>
<category id="1032283" leaf="true" name="摄影灯泡"/>
<category id="1035280" leaf="true" name="普通照明白炽灯"/>
<category id="1035279" leaf="true" name="微型灯泡"/>
<category id="1035278" leaf="true" name="聚光灯泡"/>
<category id="1035277" leaf="true" name="水下灯泡"/>
<category id="1035276" leaf="true" name="无影灯"/>
<category id="1035275" leaf="true" name="红外线灯泡"/>
<category id="1035274" leaf="true" name="指示灯泡"/>
<category id="1035273" leaf="true" name="其他白炽灯"/>
</category>
</category>
<category id="527" leaf="false" name="气体放电灯">
<category superId="527">
<category id="10222" leaf="true" name="氙气灯"/>
<category id="10224" leaf="true" name="U型荧光灯管"/>
<category id="1032286" leaf="true" name="冷阴极荧光灯"/>
<category id="1032282" leaf="true" name="霓虹灯管"/>
<category id="1032281" leaf="true" name="直型荧光灯管"/>
<category id="1032280" leaf="true" name="环型荧光灯管"/>
<category id="1032277" leaf="true" name="钠灯"/>
<category id="1032276" leaf="true" name="汞灯"/>
<category id="1032275" leaf="true" name="金卤灯"/>
<category id="1032274" leaf="true" name="氖灯"/>
<category id="1032273" leaf="true" name="紫外线灯管"/>
<category id="1032269" leaf="true" name="螺旋型荧光灯管"/>
<category id="1032266" leaf="true" name="其他气体放电灯"/>
</category>
</category>
</category>
</category>
</category>
</root>
<?xml version="1.0" encoding="GBK"?>
<root>
<category superId="0">
<category id="58" leaf="false" name="照明工业">
<category superId="58">
<category id="10219" leaf="false" name="白炽灯">
<category superId="10219">
<category id="1032285" leaf="true" name="彩色灯泡"/>
<category id="1032279" leaf="true" name="卤钨灯泡"/>
<category id="1032283" leaf="true" name="摄影灯泡"/>
<category id="1035280" leaf="true" name="普通照明白炽灯"/>
<category id="1035279" leaf="true" name="微型灯泡"/>
<category id="1035278" leaf="true" name="聚光灯泡"/>
<category id="1035277" leaf="true" name="水下灯泡"/>
<category id="1035276" leaf="true" name="无影灯"/>
<category id="1035275" leaf="true" name="红外线灯泡"/>
<category id="1035274" leaf="true" name="指示灯泡"/>
<category id="1035273" leaf="true" name="其他白炽灯"/>
</category>
</category>
<category id="527" leaf="false" name="气体放电灯">
<category superId="527">
<category id="10222" leaf="true" name="氙气灯"/>
<category id="10224" leaf="true" name="U型荧光灯管"/>
<category id="1032286" leaf="true" name="冷阴极荧光灯"/>
<category id="1032282" leaf="true" name="霓虹灯管"/>
<category id="1032281" leaf="true" name="直型荧光灯管"/>
<category id="1032280" leaf="true" name="环型荧光灯管"/>
<category id="1032277" leaf="true" name="钠灯"/>
<category id="1032276" leaf="true" name="汞灯"/>
<category id="1032275" leaf="true" name="金卤灯"/>
<category id="1032274" leaf="true" name="氖灯"/>
<category id="1032273" leaf="true" name="紫外线灯管"/>
<category id="1032269" leaf="true" name="螺旋型荧光灯管"/>
<category id="1032266" leaf="true" name="其他气体放电灯"/>
</category>
</category>
</category>
</category>
</category>
</root>
EOF;$dom = new DOMDocument('1.0', 'GBK');
$dom->loadXML($xml);$ret = array();$xpath = new DOMXPath($dom);// 第一级
$query = '//root/category[@superId="0"]/category';$ret = getSub($query);var_dump($ret);function getContent($entry) {
$ret = array(
'id' => $entry->getAttribute('id'),
'leaf' => $entry->getAttribute('leaf'),
'name' => $entry->getAttribute('name'),
);
return $ret;
}function getSub($query) {
global $xpath; $ret = array();
$entries = $xpath->query($query); foreach($entries as $entry) { if($entry->hasAttribute('id')) {
$id = $entry->getAttribute('id');
$ret[$id] = getContent($entry); // 获取子项
$ret[$id]['sub'] = getSub($query . '/category[@superId="'.$id.'"]/category');
}
}
return $ret;
}
if(!$ret[$id]['leaf']) {
// 获取子项
$ret[$id]['sub'] = getSub($query . '/category[@superId="'.$id.'"]/category');
}