Lecture d'un CDATA par la méthode characters
Bonjour.
Je rencontre des difficultés lorsque je tente de parser le fichier XML suivant :
Code:
1 2 3 4 5
| <?xml version="1.0" encoding="ISO-8859-1"?>
<CONTENU>
<ENR><![CDATA[28/07/2004 23:57:09,024|0|0||21|Lancement du scénario|35|Debut du téléchargement du scénario|0||0|0]]></ENR>
<ENR><![CDATA[28/07/2004 23:57:10,126|0|0||21|Lancement du scénario|33|Fin du téléchargement du scénario|0||0|0]]></ENR>
</CONTENU> |
En effet, dans ma méthode characters :
Code:
1 2
| public void characters(char[] ch, int start, int length) {
String cdata = new String(ch, start, length); |
Voici les valeurs de cdata pour les deux lignes (obtenues via debugguer) :
Code:
1 2
| cdata : "28/07/2004 23:57:09,024|0|0||21|Lancement du scénario|35|Debut du téléchargement du scénario|0||0|0"
cdata : "28/07/2004 23:57:10,126|0|0||21|Lance" |
Comment se fait-il que la deuxième ligne ne contienne pas tout le CDATA ?!
Voici le reste de mon code utilisé pour appeler le parseur :
Code:
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 58 59 60 61
| public class ScenarioXMLParser extends DefaultHandler {
private void parseSAX(File parsedFile) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
XMLReader xmlReader = spf.newSAXParser().getXMLReader();
xmlReader.setContentHandler(this);
//FileInputStream fis = new FileInputStream(parsedFile);
//xmlReader.parse(new InputSource(fis));
SAXParser sxp = spf.newSAXParser();
sxp.parse(parsedFile, this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
public void endElement(String namespaceURI, String localName, String qualifiedName) {
String currentPath = pathToString();
if (currentPath.equals("CONTENU/ENR")) {
processRecord();
}
path.remove(path.size() - 1);
}
private String pathToString() {
StringBuffer p = new StringBuffer("");
for (int i = 0; i < path.size(); i++) {
p.append(path.get(i));
if (i < path.size() - 1) {
p.append('/');
}
}
return p.toString();
}
private void processRecord() {
try {
recordProcessor.process(new ScenarioXMLRecord(headers, champsEnr, fileToParse));
xmlRecordCount++;
} catch (ScenarioRecordFormatException e) {
String msg = "La ligne " + xmlRecordCount + "n'a pas le format attendu! " + e.getMessage();
for (int i = 0; i < champsEnr.size(); i++) {
msg+= " " + champsEnr.get(i);
}
System.out.println(msg);
e.printStackTrace();
Logger.getLogger(ScenarioXMLParser.class.getName()).log(Level.SEVERE, null, e);
}
}
} |
D'avance merci, je sèche là...