JAXB 对象生成XML文件

用JAXB的小伙伴可以直接借鉴

第一步:新增一个生成xml文件方法

private void createXML(CEB621Message ceb621Message, String put) {
        File file = new File(put);
        JAXBContext jc = null;
        try {
            //根据Person类生成上下文对象
            jc = JAXBContext.newInstance(CEB621Message.class);

            //从上下文中获取Marshaller对象,用作将bean编组(转换)为xml
            Marshaller ma = jc.createMarshaller();
            //以下是为生成xml做的一些配置.
            //设置属性转换特殊字符串
            ma.setProperty("com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler",
                    new CharacterEscapeHandler() {
                        public void escape(char[] ch, int start,
                                           int length, boolean isAttVal,
                                           Writer writer) throws IOException {
                            writer.write(ch, start, length);
                        }
                    });
            //格式化输出,即按标签自动换行,否则就是一行输出
            ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            //设置编码(默认编码就是utf-8)
            ma.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            //是否省略xml头信息,默认不省略(false)
            ma.setProperty(Marshaller.JAXB_FRAGMENT, false);
            //生成xml
            ma.marshal(ceb621Message, file);
            System.out.println("生成CEB621Message_" + ceb621Message.getInventory().get(0).getInventoryHead().getCopNo() + ".xml成功");
        } catch (JAXBException e) {
            e.printStackTrace();
            System.out.println("生成CEB621Message_" + ceb621Message.getInventory().get(0).getInventoryHead().getCopNo() + ".xml失败");
        }
    }

第二步:调用方法

public static void main(String[] args) {
    //读取文件的存放目录
    Map<String, String> path = new HashMap<String, String>();
    try {
        path = m.getPaths();
         System.out.println("获取到的path数据为:XML存放目录" + path.get("put") + ",海关回执目录" + path.get("read"));
    } catch (Exception e) {
         e.printStackTrace();
     }
    //实体类赋值
     StockCrossborderNotice stockCrossborderNotice = jsonArray.getObject(i, StockCrossborderNotice.class);
    //生成xml文件
      String put = path.get("put") + "CEB621Message_" + fileName + ".xml";
    //传入赋值了的实体类,和xml存放路径
      m.createXML(ceb621Message, put);

}

猜你喜欢

转载自www.cnblogs.com/qydmw/p/13370685.html