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ý


Odpovedet emailem