正好最近在搞XML,拷贝一些我的代码给你,其实你也可以不用象我这样用CLASS,只要这几句就可以将XML文件读到数组中了.用PRINT_R看看结果你就会了. $data = implode("",file($filename)); $parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($parser,$data,$values,$tags); xml_parser_free($parser);-------------------------------------------------------------- class XMLBalanceRecord { var $PartNo; var $Supplier; var $Plant; var $INVBalance; var $QuarBalance; var $CTB1; var $CTB2;
function XMLBalanceRecord($aa) { foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } }function readXML($filename,$XMLType) { $data = implode("",file($filename)); $parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($parser,$data,$values,$tags); xml_parser_free($parser); // loop through the structures foreach ($tags as $key=>$val) { if ($key == "QueryRecords") { $QueryRecords = $val; // each contiguous pair of array entries are the // lower and upper range for each QueryRecords definition for ($i=0; $i < count($QueryRecords); $i+=2) { $offset = $QueryRecords[$i] + 1; $len = $QueryRecords[$i + 1] - $offset; switch ($XMLType) { case 'BALANCE' : $tdb[] = parseBalance(array_slice($values, $offset, $len)); break; } } } else { continue; } } return $tdb; }function parseBalance($mvalues) { for ($i=0; $i < count($mvalues); $i++) $qr[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; return new XMLBalanceRecord($qr); }XML格式如下: <?xml version="1.0"?> <EWareHouse><QueryRecords> <PARTNO>1W1H19D8 </PARTNO> <SUPPLIER>KEY </SUPPLIER> <PLANT>MARK </PLANT> <INVBALANCE>104</INVBALANCE> <QUARBALANCE>54</QUARBALANCE> <CTB1>0</CTB1> <CTB2>0</CTB2> </QueryRecords></EWareHouse>
用这个类可以很轻松的得到你要的东西phpxml的原理是Xpath。
$data = implode("",file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser);--------------------------------------------------------------
class XMLBalanceRecord {
var $PartNo;
var $Supplier;
var $Plant;
var $INVBalance;
var $QuarBalance;
var $CTB1;
var $CTB2;
function XMLBalanceRecord($aa) {
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}function readXML($filename,$XMLType) {
$data = implode("",file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser); // loop through the structures
foreach ($tags as $key=>$val) {
if ($key == "QueryRecords") {
$QueryRecords = $val;
// each contiguous pair of array entries are the
// lower and upper range for each QueryRecords definition
for ($i=0; $i < count($QueryRecords); $i+=2) {
$offset = $QueryRecords[$i] + 1;
$len = $QueryRecords[$i + 1] - $offset;
switch ($XMLType) {
case 'BALANCE' :
$tdb[] = parseBalance(array_slice($values, $offset, $len));
break;
} }
} else {
continue;
}
}
return $tdb;
}function parseBalance($mvalues) {
for ($i=0; $i < count($mvalues); $i++)
$qr[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
return new XMLBalanceRecord($qr);
}XML格式如下:
<?xml version="1.0"?>
<EWareHouse><QueryRecords>
<PARTNO>1W1H19D8 </PARTNO>
<SUPPLIER>KEY </SUPPLIER>
<PLANT>MARK </PLANT>
<INVBALANCE>104</INVBALANCE>
<QUARBALANCE>54</QUARBALANCE>
<CTB1>0</CTB1>
<CTB2>0</CTB2>
</QueryRecords></EWareHouse>
http://expert.csdn.net/Expert/topic/1597/1597294.xml?temp=.5749933