我使用php和xmlreader從xml文件中檢索數據並插入到mysql表中。我選擇了xmlreader,因爲我提供的文件是500MB。我對所有這些都陌生,並且正處於一個棘手的問題,即要將數據正確插入到MySQL表中。從文件使用php xmlreader從xml獲取數據到mysql
示例XML ...
<us:ItemMaster>
<us:ItemMasterHeader>
<oa:ItemID agencyRole="Prefix_Number" >
<oa:ID>CTY</oa:ID>
</oa:ItemID>
<oa:ItemID agencyRole="Stock_Number_Butted" >
<oa:ID>TN2100</oa:ID>
</oa:ItemID>
<oa:Specification>
<oa:Property sequence="3" >
<oa:NameValue name="Color(s)" >Black</oa:NameValue>
</oa:Property>
<oa:Property sequence="22" >
<oa:NameValue name="Coverage Percent " >5.00 %</oa:NameValue>
</oa:Property>
</oa:Specification>
</us:ItemMasterHeader>
</us:ItemMaster>
我使用的XMLReader讀取XML文件,並利用擴張()來的SimpleXML靈活地獲取詳情。我無法弄清楚如何使用嚴格的xmlreader來完成我想要的操作。
我想每個記錄的mysql表反映前綴,stockNumber,attributePriority,AttributeName和AttributeValue。
這裏是我到目前爲止的代碼...
<?php
$reader = XMLReader::open($file);
while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT &&
$reader->localName == 'ItemMasterHeader') {
$node = $reader->expand();
$dom = new DomDocument();
$n = $dom->importNode($node,true);
$dom->appendChild($n);
$sxe = simplexml_import_dom($n);
foreach ($sxe->xpath("//oa:Property[@sequence]") as $Property) {
$AttributePriority = $Property[@sequence];
echo "(" . $AttributePriority . ") ";
$Prefix = $sxe->xpath("//oa:ItemID[@agencyRole = 'Prefix_Number']/oa:ID");
foreach ($Prefix as $Prefix) {
echo $Prefix;
}
$StockNumber = $sxe->xpath("//oa:ItemID[@agencyRole ='Stock_Number_Butted']/oa:ID");
foreach ($StockNumber as $StockNumber) {
echo $StockNumber;
}
}
foreach ($sxe->xpath("//oa:NameValue[@name]") as $NameValue) {
$AttributeName = $NameValue[@name];
echo $AttributeName . " ";
}
foreach ($sxe->xpath("//oa:NameValue[@name]") as $NameValue) {
$AttributeValue = $NameValue;
echo $AttributeValue . "<br/>";
}
// mysql insert
mysql_query("INSERT INTO $table (Prefix,StockNumber,AttributePriority,AttributeName,AttributeValue)
VALUES('$Prefix','$StockNumber','$AttributePriority','$AttributeName','$AttributeValue')");
}
if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'ItemMaster') {
// visual seperator between products
echo "<hr style = 'color:red;'>";
}
}
?>
如果您將代碼縮進4個空格,將會正確顯示它。我已經爲你修好了。 – 2009-11-29 02:15:56
請發佈包含2個項目的示例XML輸入以及您想要生成的相應SQL。還請提及您使用的是哪個版本的PHP,以及您是否可以使用MySQLi代替MySQL擴展。 – 2009-11-29 06:26:43