Какой самый быстрый способ разбора & запросить большой XML-файл в PHP?
У меня есть файл около 200 мб.
И я пытаюсь разобрать & запросить определенное значение, когда задана другая информация из того же дерева.
Я использую код ниже, чтобы сделать это:
$dom = new DOMDocument();
$xpath = new DOMXPath($dom);
$reader = new XMLReader();
$reader->open('file.xml');
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'Hotel') {
$node = $dom->importNode($reader->expand(), true);
$dom->appendChild($node);
$result = $xpath->evaluate('string(self::Hotel[HotelCode = "'.$hotelCodes[0].'"]/HotelImages/ImageURL[1])', $node);
$dom->removeChild($node);
if ($result) {
echo $result;
}
}
}
Структура XML это:
<?xml version="1.0" encoding="UTF-8" ?>
- <XMLResponse>
<ResponseType>HotelListResponse</ResponseType>
- <RequestInfo>
<AffiliateCode>XX0000</AffiliateCode>
<AffRequestId>XXX</AffRequestId>
<AffRequestTime>yyyy-mm-ddThh:mm:ss</AffRequestTime>
</RequestInfo>
<TotalNumber>XXXXX</TotalNumber>
- <Hotels>
- <Hotel>
<HotelCode>XXXXXX</HotelCode>
<OldHotelId>X/XXXXXXXX</OldHotelId>
<DestinationId>XXXX</DestinationId>
<Destination>Name of city</Destination>
<Country>Name of country</Country>
<HotelName>Hotel Name</HotelName>
<StarRating>x</StarRating>
<HotelAddress>Hotel address</HotelAddress>
<HotelPostalCode>Zip Code</HotelPostalCode>
<HotelPhoneNumber>Hotel phone number</HotelPhoneNumber>
<HotelArea>Hotel area</HotelArea>
<Chain>Hotel Chain</Chain>
- <Coordinates>
<Latitude>latitude</Latitude>
<Longitude>longitude</Longitude>
</Coordinates>
- <HotelImages>
<ImageURL>URL1</ImageURL>
<ImageURL>URL2</ImageURL>
<ImageURL>URL3</ImageURL>
</HotelImages>
</Hotel>
- <Hotel>
....
</Hotel>
....
</Hotels>
</XMLResponse>
Это работает, но для получения данных на моем сайте требуется много времени.
Есть ли более быстрое решение, чтобы сделать то, что мне нужно? или метод для преобразования файла XML в файл SQL.
Спасибо
Задача ещё не решена.
Других решений пока нет …