Mne sa velmi dobre osvedcila kombinacia
SAXParser (Xerces) + Digester (jakarta commons)
s mapovanim digestera tak aby si nacital konkretny nod do objektu a ten
potom predal metode na ulozenie do DB.
spracovanie 50MB XML aj s ulozenim trvalo cca 10 mina pametove naroky boli
minimalne.
Roman
Ales said:
> Dobry den,
>
> resim nacteni dat z vetsiho (velkeho) xml souboru, jedna se cca o 20 MB.
> Uvedeny soubor vznikl exportem z MySQL databaze. Problem je v tom, ze i
> pri nastaveni Xms 30m mi vyhazuje OutOfmemory:Java heap space. Je nejake
> omezeni (nemyslim technicke, ale pro prakticke pouziti) , kdy jeste data
> ukladat do xml souboru a kdy jiz starost o data predat nejake databazi?
> Pro ukazku prikladam kod tridy, ve ktere se snazim nacist uvedeny soubor
>
> Dekuji za pripadnou odpoved
>
> Stritesky
>
>
>
> -----------------------------------------------------------------------------------------------------------------------------------------
>
> import java.io.File;
> import org.w3c.dom.Document;
> import org.w3c.dom.*;
> import javax.swing.JOptionPane;
> import java.util.*;
>
>
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.DocumentBuilder;
> import org.xml.sax.SAXException;
> import org.xml.sax.SAXParseException;
>
> public class CistXML{
>
> private String nazevSouboru = "";
> private TreeMap map = new TreeMap();
> // map = new TreeMap();
>
>
> public CistXML(String nazev){
>
> nazevSouboru = nazev;
> try {
>
>
> DocumentBuilderFactory docBuilderFactory =
> DocumentBuilderFactory.newInstance();
> DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
> Document doc = docBuilder.parse (new File(nazevSouboru));
>
> // normalize text representation
> doc.getDocumentElement ().normalize ();
> System.out.println ("Hlavni element souboru je " +
> doc.getDocumentElement().getNodeName());
>
>
> NodeList listOfRow = doc.getElementsByTagName("row");
> int totalPersons = listOfRow.getLength();
> System.out.println("Celkem row : " + totalPersons);
>
> for(int s=0; s<listOfRow.getLength() ; s++){
>
>
> Node firstPersonNode = listOfRow.item(s);
> if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
>
>
> Element firstPersonElement = (Element)firstPersonNode;
>
> //-------
> NodeList firstNameTERM =
> firstPersonElement.getElementsByTagName("TERM");
> Element firstNameElement = (Element)firstNameTERM.item(0);
>
> NodeList textFNList = firstNameElement.getChildNodes();
> System.out.println("Pocet Term je : " +
> ((Node)textFNList.item(0)).getNodeValue().trim());
>
> //-------
> NodeList lastNameTERM_1 =
> firstPersonElement.getElementsByTagName("TERM_1");
> Element lastNameElement = (Element)lastNameTERM_1.item(0);
>
> NodeList textLNList = lastNameElement.getChildNodes();
> System.out.println("Pocet TERM_1 je : " +
> ((Node)textLNList.item(0)).getNodeValue().trim());
>
>
> map.put((String)(Object)firstNameElement,(String)(Object)lastNameElement);
> }//end of if clause
>
>
> }//end of for loop with s var
>
>
> }
> catch (SAXParseException err) {
> System.out.println ("** Parsing error" + err.getLineNumber () + ",
> uri " + err.getSystemId ());
> System.out.println(" " + err.getMessage ());
> JOptionPane.showMessageDialog(null,"Chyba pøi naèítání na øádce " +
> err.getLineNumber (),"Chyba",JOptionPane.ERROR_MESSAGE);
>
> }
> catch (SAXException e) {
> Exception x = e.getException ();
> ((x == null) ? e : x).printStackTrace ();
>
> }
> catch (Throwable t) {
> t.printStackTrace ();
> }
>
>
> }//konec konstruktoru
>
> public TreeMap dejHodnotu(){
>
> return map;
> }
>
>
>
> }
>
>
>