]> source.dussan.org Git - poi.git/commitdiff
XSSF: reduce memory usage by specifing default namespace for string keys in SharedStr...
authorMaxim Valyanskiy <maxcom@apache.org>
Thu, 14 Apr 2011 10:05:04 +0000 (10:05 +0000)
committerMaxim Valyanskiy <maxcom@apache.org>
Thu, 14 Apr 2011 10:05:04 +0000 (10:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1092089 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java

index ad5d751845ff4e0d458624a2f74f5db526155dc8..432b1faab088a80698c4bcb7f2b6671280e12f2c 100644 (file)
@@ -20,10 +20,7 @@ package org.apache.poi.xssf.model;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlOptions;
@@ -86,6 +83,14 @@ public class SharedStringsTable extends POIXMLDocumentPart {
 
     private SstDocument _sstDoc;
 
+    private final static XmlOptions options = new XmlOptions();
+    static {
+        options.put( XmlOptions.SAVE_INNER );
+       options.put( XmlOptions.SAVE_AGGRESSIVE_NAMESPACES );
+       options.put( XmlOptions.SAVE_USE_DEFAULT_NAMESPACE );
+        options.setSaveImplicitNamespaces(Collections.singletonMap("", "http://schemas.openxmlformats.org/spreadsheetml/2006/main"));
+    }
+
     public SharedStringsTable() {
         super();
         _sstDoc = SstDocument.Factory.newInstance();
@@ -112,7 +117,7 @@ public class SharedStringsTable extends POIXMLDocumentPart {
             count = (int)sst.getCount();
             uniqueCount = (int)sst.getUniqueCount();
             for (CTRst st : sst.getSiArray()) {
-                stmap.put(st.toString(), cnt);
+                stmap.put(getKey(st), cnt);
                 strings.add(st);
                 cnt++;
             }
@@ -121,6 +126,10 @@ public class SharedStringsTable extends POIXMLDocumentPart {
         }
     }
 
+    private String getKey(CTRst st) {
+        return st.xmlText(options);
+    }
+
     /**
      * Return a string item by index
      *
@@ -164,7 +173,7 @@ public class SharedStringsTable extends POIXMLDocumentPart {
      * @return index the index of added entry
      */
     public int addEntry(CTRst st) {
-        String s = st.toString();
+        String s = getKey(st);
         count++;
         if (stmap.containsKey(s)) {
             return stmap.get(s);