J'ai les deux erreurs suivantes lors de l'utilisation de XMLReader.Deux erreurs lors de l'utilisation de PHP XMLreader
1) Attention: XMLReader :: read() [xmlreader.read]: MyXML.xml: 43102: erreur analyseur: xmlParseEntityRef: pas de nom
2) Attention: XMLReader :: read() [xmlreader. read]:^dans MyXMLReader.php sur la ligne 56
Est-ce que quelqu'un sait à quoi cela fait référence?
code PHP Mon (Le fichier XML est d'environ 100 Mo, donc je ne peux pas l'inclure):
<?php
//Assign file names
$XMLFile = 'MyXML.xml';
$CSVFile = 'MyCSV.csv';
//take start time to calculate run-time
$time_start = time();
//Open PHP's XMLReader. XMLReader opens each element in the XML one by one to keep memory use small.
$xml = new XMLReader();
$xml->open($XMLFile, null, 1<<19);
//Loop through all elements. Save all text from tags and attributes.
while ($xml->read()) {
if($xml->nodeType == XMLReader::TEXT) {
$row[$xml->name] = $xml->value;
}
if($xml->hasAttributes) {
while($xml->moveToNextAttribute()) {
$row[$xml->name] = $xml->value;
}
}
}
//save the titles which should appear in CSV file. All others will not be included.
$SavedRows = $row;
unset($row);
//Remove unnecessary columns i.e. datasource URLs
$RemoveColumn='xmlns:message, xmlns:common, xmlns:frb, xmlns:xsi, xsi:schemaLocation, xmlns:kf';
$RemoveColumns = explode(',', $RemoveColumn);
foreach($RemoveColumns as $key => $val) {
$val = trim($val);
unset($SavedRows[$val]);
}
//initiate all rows which should be included
foreach($SavedRows as $key => $val) {
$row[$key] = '';
}
//Create csv file
$fp = fopen($CSVFile, 'w');
//Input the column headings as first row
fputcsv($fp, array_keys($row), ',');
// Start 2nd loop through XML.
$xml = new XMLReader();
$xml->open($XMLFile, null, 1<<19);
while ($xml->read()) {
//Determine if tag is empty (An empty tag will contain data) Non empty tags contain series information.
$Output = $xml->isEmptyElement;
//Take data from non empty XML tags
if($xml->nodeType == XMLReader::TEXT) {
if(isset($SavedRows[$xml->name])) {
$row[$xml->name] = $xml->value;
}
}
//take data from XML tag attributes
if($xml->hasAttributes) {
while($xml->moveToNextAttribute()) {
if(isset($SavedRows[$xml->name])) {
$row[$xml->name] = $xml->value;
}
}
}
//If tag is empty, assume it is data and write row to file.
if($Output) {
fputcsv($fp, array_values($row), ',');
}
}
//Close file handle
fclose($fp);
//Calculate runtime
$time_end = time();
$time = $time_end - $time_start;
echo "Complete. Runtime: $time seconds";
?>
Pouvez-vous coller votre code php et document XML que vous utilisez? – Trevor