xml转换map

public class XMLConverUtil{

   private static final ThreadLocal<Map<Class<?>,Marshaller>> mMapLocal = new ThreadLocal<Map<Class<?>,Marshaller>>() {
      @Override
      protected Map<Class<?>, Marshaller> initialValue() {
         return new HashMap<Class<?>, Marshaller>();
      }
   };

   private static final ThreadLocal<Map<Class<?>,Unmarshaller>> uMapLocal = new ThreadLocal<Map<Class<?>,Unmarshaller>>(){
      @Override
      protected Map<Class<?>, Unmarshaller> initialValue() {
         return new HashMap<Class<?>, Unmarshaller>();
      }
   };

   /**
    * XML to Object
    * @param <T> T
    * @param clazz clazz
    * @param xml xml
    * @return T
    */
   public static <T> T convertToObject(Class<T> clazz,String xml){
      return convertToObject(clazz,new StringReader(xml));
   }

   /**
    * XML to Object
    * @param <T> T
    * @param clazz clazz
    * @param inputStream  inputStream
    * @return T
    */
   public static <T> T convertToObject(Class<T> clazz,InputStream inputStream){
      return convertToObject(clazz,new InputStreamReader(inputStream));
   }
   
   /**
    * XML to Object
    * @param <T> T
    * @param clazz clazz
    * @param inputStream  inputStream
    * @param charset charset
    * @return T
    */
   public static <T> T convertToObject(Class<T> clazz,InputStream inputStream,Charset charset){
      return convertToObject(clazz,new InputStreamReader(inputStream, charset));
   }

   /**
    * XML to Object
    * @param <T> T
    * @param clazz clazz
    * @param reader reader
    * @return T
    */
   @SuppressWarnings("unchecked")
   public static <T> T convertToObject(Class<T> clazz,Reader reader){
      try {
         Map<Class<?>, Unmarshaller> uMap = uMapLocal.get();
         if(!uMap.containsKey(clazz)){
            JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            uMap.put(clazz, unmarshaller);
         }
         return (T) uMap.get(clazz).unmarshal(reader);
      } catch (JAXBException e) {
         e.printStackTrace();
      }
      return null;
   }

   /**
    * Object to XML
    * @param object object
    * @return xml
    */
   public static String convertToXML(Object object){
      try {
         Map<Class<?>, Marshaller> mMap = mMapLocal.get();
         if(!mMap.containsKey(object.getClass())){
            JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            //设置CDATA输出字符
            marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
               public void escape(char[] ac, int i, int j, boolean flag, Writer writer) throws IOException {
                  writer.write(ac, i, j);
               }
            });
            mMap.put(object.getClass(), marshaller);
         }
         StringWriter stringWriter = new StringWriter();
         mMap.get(object.getClass()).marshal(object,stringWriter);
         return stringWriter.getBuffer().toString();
      } catch (JAXBException e) {
         e.printStackTrace();
      }
      return null;
   }

   /**
    * 转换简单的xml to map
    * @param xml xml
    * @return map
    */
   public static Map<String,String> convertToMap(String xml){
      Map<String, String> map = new LinkedHashMap<String,String>();
      try {
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         StringReader sr = new StringReader(xml);
         InputSource is = new InputSource(sr);
         Document document = db.parse(is);

         Element root = document.getDocumentElement();
         if(root != null){
            NodeList childNodes = root.getChildNodes();
            if(childNodes != null && childNodes.getLength()>0){
               for(int i = 0;i < childNodes.getLength();i++){
                  Node node = childNodes.item(i); 
                  if( node != null && node.getNodeType() == Node.ELEMENT_NODE){
                     map.put(node.getNodeName(), node.getTextContent());
                  }
               }
            }
         }
      } catch (DOMException e) {
         e.printStackTrace();
      } catch (ParserConfigurationException e) {
         e.printStackTrace();
      } catch (SAXException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return map;
   }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值