J'utilise php et xmlreader pour récupérer des données à partir d'un fichier xml et les insérer dans une table mysql. J'ai choisi xmlreader car les fichiers fournis sont de 500mb. Je suis nouveau à tout cela et je suis à un point critique pour obtenir les données à insérer correctement dans la table mysql.en utilisant php xmlreader pour obtenir des données de xml à mysql
xml Exemple de fichier ...
<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>
Je lis le fichier XML à l'aide xmlreader et en utilisant expand() pour SimpleXML de flexibilité à obtenir les détails. Je ne pouvais pas comprendre comment faire ce que je voulais en utilisant strictement xmlreader.
Je souhaite que chaque enregistrement de la table mysql reflète les préfixes, stockNumber, attributePriority, AttributeName et AttributeValue.
Voici mon code jusqu'à présent ...
<?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;'>";
}
}
?>
Si vous indentez votre code de 4 espaces SO l'affichera correctement. Je l'ai réparé pour toi. –
Veuillez écrire un exemple d'entrée XML avec 2 éléments et le code SQL que vous souhaitez générer. Veuillez également indiquer quelle version de PHP vous utilisez et si vous pouvez utiliser MySQLi à la place de l'extension MySQL. –