Wie deaktiviere ich PrettyPrint Xstream XML und füge trotzdem Stylesheet und Prolog hinzu?

StackOverflow https://stackoverflow.com/questions/19855158

  •  29-07-2022
  •  | 
  •  

Frage

Ich kann Print in XML (alle Newlines/Wagenrenditen) mit CompactWriter () entfernen, aber wie kann ich meinen Prolog und meine Stylesheets behalten?

Derzeit verwende ich die Writer -Klasse, um Prolog und Stylesheet mithilfe der Schreibmethode hinzuzufügen.

Unten ist meine Funktion, ein Objekt zu serialisieren.

private void serializeData(DiagData diagData){  
        fileinfo=new HashMap<String,String>();
        XStream xstream = new XStream();
        xstream.processAnnotations(DiagData.class);

        FileOutputStream fileOutputStream=null;
        Writer writer=null;
        //CompactWriter writer=null;
        xstream.registerConverter(new MapConverter());

        try {
            String path = Constants.XML_PATH+File.separator+Constants.DIRECTORY_NAME;
            File diagnosticDir = new File(path);

            String serialNumber=null;

            IDataCollector dataCollector=new DataCollector();
            serialNumber=dataCollector.getSerialNumber();

            String fileName = new SimpleDateFormat("yyyyMMddhhmmss'.xml'").format(new Date());
            if(serialNumber!=null)fileName=serialNumber+Constants.UNDERSCORE+fileName;
            fileName=Constants.PHONEHOME+Constants.UNDERSCORE+fileName;

            fileOutputStream = new FileOutputStream(path+File.separator+fileName);

            writer = new OutputStreamWriter(fileOutputStream);
            //writer = new CompactWriter(new OutputStreamWriter(fileOutputStream));

            writer.write(Constants.PROLOG);
            writer.write(Constants.STYLESHEET);
            xstream.toXML(diagData, writer);
            //xstream.marshal(diagData, writer);

        } catch (FileNotFoundException e1) {

        } catch (Exception e) {

        } finally {
            try {
                fileOutputStream.close();
                writer.close();             
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }
        }
    }
War es hilfreich?

Lösung

Wenn Sie sich den Xstream ansehen Dokumentation, Sie geben eindeutig an, dass Sie den XML -Prolog selbst hinzufügen müssen:

Why does XStream not write an XML declaration?

XStream is designed to write XML snippets, so you can embed its output into 
an existing stream or string. You can write the XML declaration yourself into 
the Writer before using it to call XStream.toXML(writer).

Der folgende Code sollte funktionieren. Ich habe den größten Teil Ihres Codes entfernt, also müssen Sie ihn zurücksetzen. Der Zweck ist nur, Ihnen ein hartes Beispiel zu geben:

private static void serializeData(Object diagData) throws Exception {
    XStream xstream = new XStream();
    xstream.processAnnotations(DiagData.class);

    FileOutputStream fileOutputStream = null;
    Writer writer = new PrintWriter(new File(your file));
    CompactWriter compactWriter = new CompactWriter(writer);

    try {
        writer.write(your xml prolog);
        writer.write(your stylesheet);
        xstream.marshal(diagData, compactWriter);
    } catch (FileNotFoundException e1) {

    } catch (Exception e) {

    } finally {
       release resources
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top