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ý