كيفية تعطيل Prettyprint Xmstream XML وما زالت تضيف ورقة الأنماط والمقدمة؟

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

  •  29-07-2022
  •  | 
  •  

سؤال

يمكنني إزالة Prettyprint في XML (جميع عوائد Newlines/Carriage) باستخدام CompactWriter () ولكن كيفية الحفاظ على مقدمة وأوراق الأنماط؟

حاليًا أستخدم فئة الكاتب لإضافة مقدمة وورقة أنماط باستخدام طريقة الكتابة.

فيما يلي وظيفتي لتسلسل كائن.

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
            }
        }
    }
هل كانت مفيدة؟

المحلول

إذا نظرت إلى Xstream توثيق, ، يذكرون بوضوح أنه يتعين عليك إضافة مقدمة XML بنفسك:

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).

يجب أن يعمل الرمز التالي. لقد أزلت معظم التعليمات البرمجية الخاصة بك ، لذلك عليك أن تعيدها. والغرض هو فقط لإعطائك مثال عمل تقريبي:

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
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top