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