@@ -71,6 +71,7 @@ public final class SimpleXmlEncoder extends DefaultStreamPipe<ObjectReceiver<Str
7171 private String rootTag = DEFAULT_ROOT_TAG ;
7272 private String recordTag = DEFAULT_RECORD_TAG ;
7373 private Map <String , String > namespaces = new HashMap <String , String >();
74+ private boolean writeRootTag = true ;
7475 private boolean writeXmlHeader = true ;
7576 private boolean separateRoots ;
7677
@@ -103,6 +104,10 @@ public void setWriteXmlHeader(final boolean writeXmlHeader) {
103104 this .writeXmlHeader = writeXmlHeader ;
104105 }
105106
107+ public void setWriteRootTag (final boolean writeRootTag ) {
108+ this .writeRootTag = writeRootTag ;
109+ }
110+
106111 public void setSeparateRoots (final boolean separateRoots ) {
107112 this .separateRoots = separateRoots ;
108113 }
@@ -126,6 +131,17 @@ public void startRecord(final String identifier) {
126131 atStreamStart = false ;
127132
128133 element = new Element (recordTag );
134+ if (!writeRootTag ) {
135+ addNamespacesToElement ();
136+ }
137+ }
138+
139+ private void addNamespacesToElement () {
140+ for (final Entry <String , String > namespace : namespaces .entrySet ()) {
141+ final String key = namespace .getKey ();
142+ final String name = XMLNS_MARKER + (key .isEmpty () ? "" : ":" ) + key ;
143+ element .addAttribute (name , namespace .getValue ());
144+ }
129145 }
130146
131147 @ Override
@@ -184,27 +200,30 @@ private void writeHeader() {
184200 if (writeXmlHeader ) {
185201 builder .append (XML_HEADER );
186202 }
187-
188- builder .append (BEGIN_OPEN_ELEMENT );
189- builder .append (rootTag );
190- for (final Entry <String , String > entry : namespaces .entrySet ()) {
191- builder .append (XMLNS_MARKER );
192- if (!entry .getKey ().isEmpty ()) {
193- builder .append (':' );
194- builder .append (entry .getKey ());
203+ if (writeRootTag ) {
204+ builder .append (BEGIN_OPEN_ELEMENT );
205+ builder .append (rootTag );
206+ for (final Entry <String , String > entry : namespaces .entrySet ()) {
207+ builder .append (XMLNS_MARKER );
208+ if (!entry .getKey ().isEmpty ()) {
209+ builder .append (':' );
210+ builder .append (entry .getKey ());
211+ }
212+ builder .append (BEGIN_ATTRIBUTE );
213+ writeEscaped (builder , entry .getValue ());
214+ builder .append (END_ATTRIBUTE );
195215 }
196- builder .append (BEGIN_ATTRIBUTE );
197- writeEscaped (builder , entry .getValue ());
198- builder .append (END_ATTRIBUTE );
216+ builder .append (END_OPEN_ELEMENT );
199217 }
200- builder .append (END_OPEN_ELEMENT );
201218 }
202219
203220 private void writeFooter () {
204- builder .append (NEW_LINE );
205- builder .append (BEGIN_CLOSE_ELEMENT );
206- builder .append (rootTag );
207- builder .append (END_CLOSE_ELEMENT );
221+ if (writeRootTag ) {
222+ builder .append (NEW_LINE );
223+ builder .append (BEGIN_CLOSE_ELEMENT );
224+ builder .append (rootTag );
225+ builder .append (END_CLOSE_ELEMENT );
226+ }
208227 }
209228
210229 protected static void writeEscaped (final StringBuilder builder , final String str ) {
0 commit comments