Я не могу импортировать мой большой xml-файл (1,5 г) в базу данных. Затем я использую XMLReader->read()
. У меня есть ошибка, где элемент имеет амперсанд. возможно, вы можете мне помочь, когда я конвертирую неверный файл XML в действительный?Импортировать недопустимый XML-файл (1.5G) в MySQL с unescaped ampersand
Я использую аккуратный, xmlsoft, sed в Windows 7, но это программное обеспечение командной строки ломается при ошибке предельной памяти.
PHP:
$reader = new XMLReader();
$reader->open('sm.xml');
while ($reader->read())
{
// check to ensure nodeType is an Element not attribute or #Text
if ($reader->nodeType == XMLReader::ELEMENT)
{
if ($reader->localName == 'brand')
{
$reader->read();
$data['brand'] = $reader->value;
}
if ($reader->localName == 'number')
{
$reader->read();
$data['number'] = $reader->value;
}
if ($reader->localName == 'descr')
{
$reader->read();
$data['descr'] = $reader->value;
}
if ($reader->localName == 'price')
{
$reader->read();
$data['price'] = $reader->value;
}
if ($reader->localName == 'deadline')
{
$reader->read();
$data['deadline'] = $reader->value;
}
if ($reader->localName == 'rest')
{
$reader->read();
$data['rest'] = $reader->value;
}
} //Checking if the </person>tag is reached.
elseif($reader->nodeType == XMLReader::END_ELEMENT AND $reader->name == 'article')
{
$sql = 'INSERT INTO tec (brand_name,brand_art,name_tov,cena,srok,kolvo)
VALUES ("'.$data['brand'].'","'.$data['number'].'","'.$data['descr'].'","'.$data['price'].'","'.$data['deadline'].'","'.$data['rest'].'");';
$mysqli->query($sql);
// Insert the content of array $data to database or some other action.
//print_r($data);
}
}
Если этот код чтения элемент <number>111&111</number>
У меня есть ошибка. Я могу удалить этот амперсанд с помощью инструмента командной строки, но у меня нехватка памяти на очень большом XML-файле.
Мой пример запуска:
xmllint.exe --recover --maxmem 10000000000 --noout --encode utf8 sm.xml -o smtt.xml
tidy.exe -m -utf8 -xml sm.xml
sed.exe 's/&/\&/g; s/&amp;/\&/g; s/&quot;/\"/g;' sm.xml > smtt.xml <-- can't run
Может есть другой способ использовать PHP XMLReader с проверкой пропуском?
Можем ли мы увидеть ваш PHP-код? Проблема в том, что у вас амперсанд, или у вас заканчивается память? Какая именно ошибка вы получаете? – halfer
проблема, когда у меня есть амперсанд, я не могу убежать или пропустить этот символ? из памяти я имею в виду revalidate большой файл xml для подготовки читать для php xmlreader. Ошибка php: XMLReader-> read() 111 & 111 –
Mike
Правильно, поэтому у вас есть две ошибки: одна из них заключается в том, что если вы попытаетесь исправить недопустимый XML, у вас закончится нехватка памяти, а вторая - если вы не исправить неверный XML, вы получите ошибку чтения. Предполагается вторая, поэтому вы должны попытаться исправить свой XML. 1. ** Точно ** в какой утилите командной строки не хватило памяти? 2. Можете ли вы заменить это другой утилитой? – halfer