Ошибка SimpleXML при разборе XML-документов, в которых написано несколько строк с объявлением версии и кодировки - PullRequest
0 голосов
/ 15 февраля 2019

Документ для синтаксического анализа в PHPs simpleXML содержит несколько записей:
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
по всему файлу.Файл представляет собой набор из 10-15 одинаковых итераций тегов с разными значениями внутри.Одним из решений, которое я нашел для разрешения повторения этого тега, было пройти и вручную удалить <?xml version="1.0" encoding="UTF-8"?> во всех других случаях, но я предпочитаю делать это автоматически, потому что это будет повторяющаяся проблема.

Как я могу удалить строки кода или игнорировать строки кода с повторным объявлением <?xml version="1.0" encoding="UTF-8"?>?

Я попытался удалить каждый экземпляр вручную и использовать функцию replacestring ().1. Ручное удаление занимает очень много времени.2. replacestr () выдает ошибку, потому что в файле XML есть много символов, которые останавливают трансляцию.

Я ожидаю отфильтровать этот файл XML и сохранить значения каждого / некоторых тегов в mysql, используяMySQL соединение.Некоторые из значений внутри тегов я также хотел бы перевести «истинные» и «ложные» значения в логическое целое число перед вставкой данных в соответствующую строку mysql.

1 Ответ

0 голосов
/ 15 февраля 2019

Скорее всего, у вас есть серия документов XML в одном файле, поэтому попытка просто удалить заголовок xml приведет к неверному документу XML (так как в нем будет несколько корневых элементов - по одному для каждого документа).

Вы можете разделить содержимое по заголовку (используя explode()) - и обработать каждый как отдельный XML-документ ...

$data = file_get_contents($fileName);
$docs = explode('<?xml version="1.0" encoding="UTF-8"?>', $data);
// Remove first document as it will be empty
array_shift($docs);
foreach ( $docs as $doc )   {
    $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8"?>'.$doc);
    // Process XML file
    echo $xml->getName().PHP_EOL;
}
...