From ade6735c43154de90e0419d06977d1e9f703fe22 Mon Sep 17 00:00:00 2001 From: Maxim Valyanskiy Date: Thu, 14 Apr 2011 10:05:04 +0000 Subject: [PATCH] XSSF: reduce memory usage by specifing default namespace for string keys in SharedStringsTable git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1092089 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/model/SharedStringsTable.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java index ad5d75184..432b1faab 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java @@ -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);