Révision 2940

tmp/org.txm.core/src/java/org/txm/xml/XMLProcessor.java (revision 2940)
6 6
import java.io.FileOutputStream;
7 7
import java.io.IOException;
8 8
import java.net.URL;
9
import java.util.HashSet;
9 10
import java.util.LinkedHashMap;
10 11

  
11 12
import javax.xml.stream.XMLOutputFactory;
......
31 32
	protected XMLStreamWriter writer;
32 33
	
33 34
	/**
35
	 * list of XML elements that are always milestones elements
36
	 */
37
	protected HashSet<String> milestoneElements = new HashSet<String>();
38
	
39
	/**
34 40
	 * 
35 41
	 * @param infile the file to read
36 42
	 * @throws IOException
......
242 248
		
243 249
		String prefix = parser.getPrefix();
244 250
		if (prefix != null && prefix.length() > 0) {
245
			writer.writeStartElement(Nscontext.getNamespaceURI(prefix), localname);
251
			if (milestoneElements.contains(localname)) {
252
				writer.writeEmptyElement(Nscontext.getNamespaceURI(prefix), localname);
253
			} else {
254
				writer.writeStartElement(Nscontext.getNamespaceURI(prefix), localname);
255
			}
246 256
		}
247 257
		else {
248
			writer.writeStartElement(localname);
258
			if (milestoneElements.contains(localname)) {
259
				writer.writeEmptyElement(localname);
260
			} else {
261
				writer.writeStartElement(localname);
262
			}
249 263
		}
250 264
		
251 265
		for (int i = 0; i < parser.getNamespaceCount(); i++) {
......
272 286
	
273 287
	@Override
274 288
	protected void processCharacters() throws XMLStreamException {
275
		writer.writeCharacters(parser.getText());
289
		if (parser.getText() != null && parser.getText().length() > 0) {
290
			writer.writeCharacters(parser.getText());
291
		}
276 292
	}
277 293
	
278 294
	@Override
......
298 314
	
299 315
	@Override
300 316
	protected void processEndElement() throws XMLStreamException {
301
		writer.writeEndElement();
317
		if (!milestoneElements.contains(localname)) {
318
			writer.writeEndElement();
319
		}
302 320
	}
303 321
	
304 322
	@Override
......
327 345
			XMLProcessor builder;
328 346
			
329 347
			builder = new XMLProcessor(input.toURI().toURL());
330
			
348
			builder.addMilestoneElements("milestone");
331 349
			// IdentityHook hook1 = new IdentityHook("hook1", new LocalNameHookActivator(null, "p"), builder) {
332 350
			//
333 351
			// @Override
......
390 408
		}
391 409
	}
392 410
	
411
	public void addMilestoneElements(String... elements) {
412
		for (String e : elements) {
413
			milestoneElements.add(e);
414
		}
415
	}
416
	
417
	public void removeMilestoneElements(String... elements) {
418
		for (String e : elements) {
419
			milestoneElements.remove(e);
420
		}
421
	}
422

  
393 423
	/**
394 424
	 * 
395 425
	 * @return the actual hooks hash

Formats disponibles : Unified diff