@@ -71,6 +71,7 @@ public final class SimpleXmlEncoder extends DefaultStreamPipe<ObjectReceiver<Str
71
71
private String rootTag = DEFAULT_ROOT_TAG ;
72
72
private String recordTag = DEFAULT_RECORD_TAG ;
73
73
private Map <String , String > namespaces = new HashMap <String , String >();
74
+ private boolean writeRootTag = true ;
74
75
private boolean writeXmlHeader = true ;
75
76
private boolean separateRoots ;
76
77
@@ -103,6 +104,10 @@ public void setWriteXmlHeader(final boolean writeXmlHeader) {
103
104
this .writeXmlHeader = writeXmlHeader ;
104
105
}
105
106
107
+ public void setWriteRootTag (final boolean writeRootTag ) {
108
+ this .writeRootTag = writeRootTag ;
109
+ }
110
+
106
111
public void setSeparateRoots (final boolean separateRoots ) {
107
112
this .separateRoots = separateRoots ;
108
113
}
@@ -126,6 +131,17 @@ public void startRecord(final String identifier) {
126
131
atStreamStart = false ;
127
132
128
133
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
+ }
129
145
}
130
146
131
147
@ Override
@@ -184,27 +200,30 @@ private void writeHeader() {
184
200
if (writeXmlHeader ) {
185
201
builder .append (XML_HEADER );
186
202
}
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 );
195
215
}
196
- builder .append (BEGIN_ATTRIBUTE );
197
- writeEscaped (builder , entry .getValue ());
198
- builder .append (END_ATTRIBUTE );
216
+ builder .append (END_OPEN_ELEMENT );
199
217
}
200
- builder .append (END_OPEN_ELEMENT );
201
218
}
202
219
203
220
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
+ }
208
227
}
209
228
210
229
protected static void writeEscaped (final StringBuilder builder , final String str ) {
0 commit comments