XSLT a Xalan - částečný DOM

Tomáš Záluský zalusky na centrum.cz
Pondělí Červen 30 12:06:16 CEST 2008


Zdravím konferenci,

mám 90MB XML soubor:
<root>
	<foo>...</foo>
	<foo>...</foo>
	...
</root>

Pomocí XSLT (Xalan 2.7.0) chci docílit transformace na tvar
<output>
	<hoo>...</hoo>
	<hoo>...</hoo>
	...
</output>

Elementy foo mají v sobě ještě další elementy, ale jejich struktura není složitá a a velikost je cca 2 obrazovky, obdobně to platí i pro elementy hoo. Pro každý element foo se generuje element hoo. 

Problém je v tom, že u velkého souboru dochází paměť. Paměť nemohu navýšit a nemá to podle mne ani smysl, protože to, co ji spotřebovává, je množství elementů foo, ne jejich velikost (ta je cca na 1-2 obrazovky). Přitom elementy foo jsou na sobě nezávislé, pro XSL transformaci daného elementu foo nepotřebuji znalost okolních elementů.

Chápu, že je potřeba zabránit tomu, aby si parser načetl celý dokument, ale ke spotřebě paměti dochází, i pokud soubor čtu jako SAXSource. Předpokládám, že i když Xalan umí přečíst soubor SAXem, ve výsledku je nakonec stejně celý dokument. Mohl bych napsat content handler, který by načítal jednotlivé elementy foo do dočasného souboru a na nich postupně volal transformaci, ale přijde mi to až jako poslední možnost. Zajímalo by mne spíš, zda by takový content handler šlo přímo použít s příslušným transformerem tak, aby v daném okamžiku byl v paměti jen jeden element foo.

Nemáte s tím prosím někdo zkušenost? Předem dík.

Tomáš Záluský





Další informace o konferenci Konference