Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Guardar datos parseo XML

Hola,

Necesitaría guardar, para su posterior tratamiento, una lista que obtengo al parsear un XML. Puede darme alguien una idea de por donde tirar...? Gracias!

Este es mi código.


package example;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.HashMap;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.sun.org.apache.xerces.internal.parsers.SAXParser;


public class BugsSaxParserSonar extends DefaultHandler{

private static final String BUG_COLLECTION = "BugCollection";
private static final String BUG_INSTANCE = "BugInstance";
private static final String LONG_MESSAGE = "LongMessage";
...
private static final String PATH_PROP = "sourcepath";
private static final String LINE_PROP = "start";

private boolean inBugCollectionZone = false;
private boolean inBugInstanceZone = false;
private boolean inLongMessage = false;
...

private String message = null;
private String instanceId = null;
private List<String> sourcePath = new ArrayList<String>();
private List<String> sourceLine = new ArrayList<String>();

private Map<String, Object[]> bugs = new HashMap<String, Object[]>(1,1);

private Pattern folderPattern = null;

public BugsSaxParserSonar (String folderPatterString){
folderPattern = Pattern.compile(folderPatterString);
}

public void startElement (String uri, String localName, String qName, Attributes attributes) {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(LONG_MESSAGE.equals(qName)){
inLongMessage = true;
}
else if(inClass == false && inMethod == false && inField == false) && SOURCE_LINE.equals(qName)){
inSourceLine = true;
sourcePath.add(attributes.getValue(PATH_PROP));
sourceLine.add(attributes.getValue(LINE_PROP));
}
}
else if(BUG_INSTANCE.equals(qName)){
instanceId = attributes.getValue(INSTANCE_HASH);
inBugInstanceZone = true;
}
}
else if (BUG_COLLECTION.equals(qName)){
inBugCollectionZone = true;
}
}


public void characters (char ch[], int start, int length) throws SAXException {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(inLongMessage){
if(message == null){
message = "";

}
message += new String(ch, start, length);
}
}
}
}

public void endElement (String uri, String localName, String qName) {
if(inBugCollectionZone){
if(inBugInstanceZone){
if(LONG_MESSAGE.equals(qName)){
inLongMessage = false;
}

}
else if(BUG_INSTANCE.equals(qName)){
inBugInstanceZone = false;
bugs.put(instanceId, new Object[]{new ArrayList<String>(sourcePath), new ArrayList<String>(sourceLine), message});
clearBugsValues();
}
}
else if (BUG_COLLECTION.equals(qName)){
inBugCollectionZone = false;
}
}

private void clearBugsValues(){

inBugCollectionZone = false;
inBugInstanceZone = false;
inLongMessage = false;
...

}

public Map<String, Object[]> getBugs() {
return bugs;
}

public String getWorkingDirectory() {
return workingDirectory;
}

public void setWorkingDirectory(String workingDirectory) {
this.workingDirectory = workingDirectory;
}


public static void main(String[] args){
BugsSaxParserSonar rsp = new BugsSaxParserSonar("/?(DD|DS)/");
try{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("D:/tmp/findbugs-result.xml", rsp);
}catch(ParseConfigurationException e){
System.err.println("error de parseo en XML");
}catch(SAXException e2){
e2.printStackTrace();
System.err.println("error de sax : " + e2.getMessage());
}catch(Exception e3){
System.err.println("error de io : " + e3.getMessage());
}
for(String id : rsp.getBugs().keySet()){
Object[] bugsValues = rsp.getBugs().get(id);
List<String> paths = (List<String>)bugsValues[0];
List<String> lines = (List<String>)bugsValues[1];
System.out.println("id:" + id + " " + paths + " " + lines + " " + bugsValues[2]);
}
}

}

abril 23, 2013 | Registered Commentersanlajela