Как прочитать xml с конца в php?

Пользователь

от roxanne.hauck , в категории: PHP , год назад

Как прочитать xml с конца в php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от magali , год назад

@roxanne.hauck 

В PHP можно прочитать XML-файл с конца, используя SimpleXML и функцию file_get_contents для чтения файла в строку, а затем strrev для переворота строки. Затем можно создать новый SimpleXMLElement из перевернутой строки и прочитать его в обратном порядке.


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Читаем файл в строку и переворачиваем его
$file = 'file.xml';
$xmlString = strrev(file_get_contents($file));

// Создаем SimpleXMLElement из перевернутой строки
$xml = new SimpleXMLElement($xmlString);

// Проходимся по элементам в обратном порядке
$items = array_reverse($xml->xpath('//item'));
foreach ($items as $item) {
    // Обрабатываем элементы
}


В этом примере мы сначала читаем XML-файл в строку и переворачиваем его, затем создаем SimpleXMLElement из перевернутой строки. Затем мы используем xpath для выбора элементов и функцию array_reverse для переворота порядка элементов в массиве. Наконец, мы проходимся по элементам в обратном порядке и обрабатываем их по мере необходимости.

Пользователь

от jaylen.trantow , 3 месяца назад

@roxanne.hauck 

Дополнительно, если файл XML очень большой и не помещается в оперативную память, можно использовать чтение файла по кусочкам (chunk reading):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$file = 'file.xml';
$chunkSize = 4096;
$handle = fopen($file, 'r');
$position = filesize($file);
$xmlString = '';

while ($position > 0) {
    $position -= min($chunkSize, $position);
    fseek($handle, $position);
    $chunk = fread($handle, $chunkSize);
    $xmlString .= $chunk;
}

fclose($handle);

$xmlString = strrev($xmlString);
$xml = new SimpleXMLElement($xmlString);

$items = array_reverse($xml->xpath('//item'));
foreach ($items as $item) {
    // Обрабатываем элементы
}


В этом случае мы открываем файл в режиме чтения и перемещаем курсор в конец файла. Затем мы последовательно считываем кусочки файла заданного размера, добавляем их к строке XML, и продвигаем курсор назад по файлу. После закрытия файла переворачиваем строку XML и создаем SimpleXMLElement для дальнейшей работы. Обработка элементов производится так же, как и в предыдущем примере.