2012-04-10 5 views
-3

Ich habe eine Swing-GUI geschrieben, die eine Textbereich-basierte GUI ist. Wenn ein Benutzer die Daten in die GUI eingibt, sollte er in der Lage sein, diese Daten in einer separaten XML-Vorlagendatei an den entsprechenden Stellen zusammenzuführen. Wie kann ich das erreichen?Wie werden die Daten von einer Swing-GUI mit einer XML-Vorlagendatei zusammengeführt?

Bitte lassen Sie mich die Schritte und auch die Open-Source-Tools wissen, die dazu verwendet werden.

+0

Ich habe Googles Closure Tools, Jamon APIs, aber ich finde es, dass nützlich für diesen Zweck. –

Antwort

3

Ich habe javax.xml verwendet, um eine Klasse zum Generieren des XML aus einer Document zu erstellen.

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.TransformerFactoryConfigurationError; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

import com.ggl.mapping.model.WorkMap; 

public class GenerateXML { 

    public static final String DISPLAY_DEGREES = "display_degrees"; 

    WorkMap workMap; 

    public GenerateXML(WorkMap workMap) { 
     this.workMap = workMap; 
    } 

    public void execute() throws ParserConfigurationException, 
      TransformerConfigurationException, TransformerException, 
      TransformerFactoryConfigurationError, UnsupportedEncodingException, 
      FileNotFoundException { 
     DocumentBuilderFactory dbInstance = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder builder = dbInstance.newDocumentBuilder(); 
     Document document = builder.newDocument(); 

     Element layout = document.createElement("layout"); 
     layout.setAttribute(DISPLAY_DEGREES, 
       new Boolean(workMap.isDisplayDegrees()).toString()); 
     document.appendChild(layout); 

     workMap.toXMLString(document, layout); 

     TransformerFactory tfInstance = TransformerFactory.newInstance(); 
     Transformer transformer = tfInstance.newTransformer(); 
     DOMSource source = new DOMSource(document); 
     String fileName = workMap.getFullSaveFileName(); 
     StreamResult result = new StreamResult(new OutputStreamWriter(
       new FileOutputStream(fileName), "UTF-8")); 
     transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); 
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.setOutputProperty(
       "{http://xml.apache.org/xslt}indent-amount", "4"); 
     transformer.transform(source, result); 
    } 

} 

Dann in jedem meiner Modellklassen, ich hatte eine toXMLString Methode.

public void toXMLString(Document document, Element layout) { 
    for (EarthCoordinate earthCoordinate : earthCoordinateList) { 
     Element coordinate = earthCoordinate.toXMLString(document); 
     layout.appendChild(coordinate); 
    } 
} 

.

public Element toXMLString(Document document) { 
    Element coordinateElement = document.createElement(COORDINATE); 
    coordinateElement.setAttribute(LATITUDE, 
      getValueDegrees(getLatitude())); 
    coordinateElement.setAttribute(LONGITUDE, 
      getValueDegrees(getLongitude())); 
    coordinateElement.setAttribute(TRACK_COORDINATE, new Boolean(
      isTrackCoordinate()).toString()); 

    if (!getDescription().equals("")) { 
     Element descriptionElement = document.createElement(DESCRIPTION); 
     descriptionElement.setTextContent(getDescription()); 
     coordinateElement.appendChild(descriptionElement); 
    } 

    return coordinateElement; 
} 
Verwandte Themen