разные подходы. Как лучше?

Alexandre

PHPПенсионер
разные подходы. Как лучше?

есть XML ориентированная CMS ка на PHP 4 (libxml\libxslt)

выбирается информация из трех больших XML файлов.
из первого по дате выбираем соответсвующие блоки <b>
Код:
<root>
<day dt="1.1.2005">
  <b id=.../>
   ...
</day> 
<day dt="2.1.2005">
  <b id=123/>
   ...
</day> 
</root>
из второго по блокам выбираем итемы....
Код:
<root>
<block id="123">
  <item id=777/>
  <item id=778/>
   ...
</block> 
<block id="124">
  <item id=780/>
  <item id=779/>
   ...
</block> 
</root>
из третьего по итемам выбирается необходимая информация
Код:
<root>
<item id="124">
  <p=....>
  <q=....>
</item >
<item id="125">....</item>
</root>
В итоге должны получить расписание (от даты 1 до даты два) сгруппированные итемы, вернее данные из итемов.

Какие есть альтернативы
- Парсить Домом по очереди три XML ля (используя XPath), составить xml файл и сделать финальное XSLT преобразование (в HTML).
- сделать три поочереди XSLT преобразования.
- сделать одно сложное XSLT преобразование.

Остановился на втором варианте. Но при выполнении второго преобразования у меня уходит на парсинг 10 сек. Соответственно если делать одно большое преобразование, то из-за большого объема, боюсь, что просто сервак ляжет. (это отрабатывает на домашнем компе - не знаю как поведет себя на хостинге)
Отсюда напрашивается первый вариант - использовать ДОМ, что не хотелосьбы.... ужасно неудобно.

Хотелось бы услышать иные мнения.
 

inTox

вёбных дел мастер
из-за большого объема
скока чего в мегабайтах?

конешно можно разными способами оптимизировать xsl-код. Например при сложных преобразованиях большого объема данных полезно бывает использовать ключи. Но если у вас слишком большой xml - вы от оптимизации можете слишком мало выиграть. Когда-то я решал подобную задачу созданием индекса (точнее что-то типа карты где у меня чего лежит с нужными аттрибутами) , а каждый итем хранил отдельно. Тут свои недостатки и достоинства. Хорошо тем, что, например, можно читая индекс обращаться только к нужным файлам через document(), минус - может получиться слишком много файлов.

Если совсем все плохо c размером, а нужен именно XML, бывает полезно читать через SAX в свои структуры, предназначенные для требуемых операций.

Короче все сильно зависит от задачи.
 
Сверху