Bonjour à tous,
j'utilise Stax pour parser un fichier XML( le but est de deviser un grand fichier XML en plusieurs petits fichiers XML) voici le code:le traitement fonctionne correctement, mais à la fin dans la variable "temp" je me trouve avec un fichier xml avec des namespaces dans tous les élements, exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 private void split(String xmlResource, String condition) throws Exception { XMLEventFactory xef = XMLEventFactory.newFactory(); XMLInputFactory xif = XMLInputFactory.newInstance(); XMLEventReader xer = xif.createXMLEventReader(new FileReader(xmlResource)); StartDocument startDocument = xef.createStartDocument(); while(xer.hasNext() && !xer.peek().isEndDocument()) { boolean metCondition; XMLEvent xmlEvent = xer.nextTag(); if(!xmlEvent.isStartElement()) { break; } StartElement breakStartElement = xmlEvent.asStartElement(); List<XMLEvent> cachedXMLEvents = new ArrayList<XMLEvent>(); List<String> cachedXMLEvent = new ArrayList<String>(); if(null == condition) { cachedXMLEvents.add(breakStartElement); metCondition = true; } else { cachedXMLEvents.add(breakStartElement); xmlEvent = xer.nextEvent(); metCondition = false; while(!(xmlEvent.isEndElement() && xmlEvent.asEndElement().getName().equals(breakStartElement.getName()))) { cachedXMLEvents.add(xmlEvent); cachedXMLEvent.add(xmlEvent.toString()); if(xmlEvent.isStartElement() && xmlEvent.asStartElement().getName().getLocalPart().equals(condition)) { metCondition = true; break; } xmlEvent = xer.nextEvent(); } } cachedXMLEvents.add(xmlEvent); metCondition = true; if(metCondition) { // Create a file for the fragment, the name is derived from the value of the id attribute FileWriter fileWriter = new FileWriter("c:/test.xml"); DocumentBuilderFactory dbFactory_ = DocumentBuilderFactory.newInstance(); dbFactory_.setNamespaceAware(false); Document doc_; DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder(); String temp=startDocument.toString(); // Write the XMLEvents that were cached while when we were // checking the fragment to see if it matched our criteria. for(XMLEvent cachedEvent : cachedXMLEvents) { temp+=cachedEvent.toString(); } } } }comment faire pour supprimer les namespaces ? je ne veux pas écrire le résultat dans un fichier en utilisant XMLEventWriter, car je souhaite envoyer le String via JMS.<?xml version="1.0" encoding='UTF-8'?>
<['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::staff>
<['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::firstname>yong</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::firstname>
<['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::lastname>mook kim</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::lastname>
<['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::nickname>mkyong</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::nickname>
<['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::salary>100000</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::salary>
</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::staff>
merci de votre aide.
Partager