# Sax Parser



## Stephan2009 (2. Jul 2009)

Hallo ich habe eine XML Datei mit dem Sax Parser eingelesen und zwar so :


```
/**
	 * The function parsed a xml file and saves it into file
	 */
	
	public static void parse() throws FileNotFoundException,
	IOException, SAXException, XMLStreamException {
	
	//DataStorageAccess dataStorageAccess = DataStorageAccess.getInstance();
	
	FileInputStream in = new FileInputStream(file); 
	
	// write parsed XML into File
	
	FileWriter out=new FileWriter("parsed_xml.txt");
	
	XMLInputFactory factory = XMLInputFactory.newInstance(); 
	XMLEventReader parser = factory.createXMLEventReader( in ); 
	StringBuilder spacer = new StringBuilder(); 
	
	while ( parser.hasNext() ) 
	{ 
	  XMLEvent event = parser.nextEvent(); 
	  switch ( event.getEventType() ) 
	  { 
	    case XMLStreamConstants.START_DOCUMENT: 
	      //System.out.println( "START_DOCUMENT:" ); 
	      out.write("START_DOCUMENT:"+"\n");
	      break; 
	    case XMLStreamConstants.END_DOCUMENT: 
	      //System.out.println( "END_DOCUMENT:" );
	      
	    	out.write("END_DOCUMENT:" +"\n");
	      
	    	parser.close(); 
	      
	    	break; 
	    
	    case XMLStreamConstants.START_ELEMENT: 
	      StartElement element = event.asStartElement(); 
	      spacer.append( "  " ); 
	      
	      out.write(( spacer.toString() 
	                          + "START_ELEMENT: " 
	                          + element.getName() +"\n")); 
	      for ( Iterator<?> attributes = element.getAttributes(); 
	            attributes.hasNext(); ) 
	      { 
	        Attribute attribute = (Attribute) attributes.next(); 
	        out.write( spacer.toString() + "  Attribut: " 
	                            + attribute.getName() + " Wert: " 
	                            + attribute.getValue() +"\n"); 
	      } 
	      
	      break; 
	    
	    case XMLStreamConstants.CHARACTERS: 
	      Characters characters = event.asCharacters(); 
	      if ( ! characters.isWhiteSpace() ) 
	    	  out.write(spacer.toString() 
	                            + "  CHARACTERS: " 
	                            + characters.getData() +"\n"); 
	      break; 
	    
	    case XMLStreamConstants.END_ELEMENT: 
	    	out.write(spacer.toString() 
	                          + "END_ELEMENT: " 
	                          + event.asEndElement().getName() +"\n"); 
	      spacer.delete( (spacer.length() - 2), spacer.length() ); 
	      
	      break; 
	    
	    case XMLStreamConstants.ATTRIBUTE: 
	      break; 
	    default : 
	      break; 
	  } 
	}
	}
```

Das funktioniert soweit , nun möchte ich allerdings das die geparste Datei wieder zurück nach XML konvertiert wird wie kann man das machen ??

Danke für die Hilfe


----------



## Gelöschtes Mitglied 5909 (2. Jul 2009)

das was du nimmst ist StAX und nicht SAX, aber schau dir mal die Klasse XMLEventWriter an


----------



## Stephan2009 (3. Jul 2009)

Ja stimmt hast recht ich nutze Stax, den EventWriter hab ich mir schon angesehn allerdings schreibt er mir die übergebenen strings ja nur als XML aus das ist schonmal ganz gut aber ich habe vor dem EventWriter meine geparste xml datei einlesen zu lassen und er soll voll automatisch die strings die um geparsten dokument enthalten sind als xml format wieder auszugeben gibts da eine Möglichkeit für ich möchte mit dem Eventwriter nicht selbst strings hinzugeben.


----------



## Gelöschtes Mitglied 5909 (7. Jul 2009)

wenn die xml dateien nicht besonders groß sind (kleiner als ca 50-100MB) würde ich dir ein XML Binding Framework empfehlen. Da arbeitest du nur nix mehr selber parsen und kannst es gleich auch wieder abspeichern.

z.B. JAXB oder EMF


----------

