public class XmlUtil {
/**
* 序列化XML
* @param <T>
* @param object
* @return
* @throws JAXBException
* @throws UnsupportedEncodingException
*/
public static <T> String Marshal(T t,Class c) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(c);
Marshaller marshaller = context.createMarshaller();
//Validator v=context.createValidator();
//v.setProperty("", "");
//v.setProperty("", "");
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //格式化XML
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
QName q = new QName("", c.getSimpleName());
JAXBElement<T> rootElement = new JAXBElement<T>(q,
c, t);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
marshaller.marshal(rootElement, outputStream);
return outputStream.toString("UTF-8");
}
public static Document String2Document(String xmlStr){
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try{
DocumentBuilder builder=factory.newDocumentBuilder();
doc = builder.parse(is);
}catch(Exception e){
e.printStackTrace();
}
return doc;
}
public static <T> Document Marshal2Node(T t,Class c) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(c);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //格式化XML
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
//自定义命名空间前缀
NamespacePrefixMapper mapper = new PreferredMapper();
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
QName q = new QName("", c.getSimpleName());
JAXBElement<T> rootElement = new JAXBElement<T>(q,
c, t);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db;
Document doc = null;
try {
db = dbf.newDocumentBuilder();
doc = db.newDocument();
marshaller.marshal(rootElement, doc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return doc;
}
//命名空间加前缀
public static class PreferredMapper extends NamespacePrefixMapper {
@Override
public String getPreferredPrefix(String namespaceUri,
String suggestion, boolean requirePrefix) {
return "m";
}
}
/**
* 反序列化XML
* @param cls
* @param objStr
* @param <T>
* @return
* @throws JAXBException
* @throws UnsupportedEncodingException
*/
public static <T> T UnMarshal(Class cls, String objStr) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(cls);
Unmarshaller unMarshaller = context.createUnmarshaller();
ByteArrayInputStream inputStream = new ByteArrayInputStream(objStr.getBytes("UTF-8"));
return (T)unMarshaller.unmarshal(inputStream);
}
}
/**
* 序列化XML
* @param <T>
* @param object
* @return
* @throws JAXBException
* @throws UnsupportedEncodingException
*/
public static <T> String Marshal(T t,Class c) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(c);
Marshaller marshaller = context.createMarshaller();
//Validator v=context.createValidator();
//v.setProperty("", "");
//v.setProperty("", "");
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //格式化XML
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
QName q = new QName("", c.getSimpleName());
JAXBElement<T> rootElement = new JAXBElement<T>(q,
c, t);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
marshaller.marshal(rootElement, outputStream);
return outputStream.toString("UTF-8");
}
public static Document String2Document(String xmlStr){
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try{
DocumentBuilder builder=factory.newDocumentBuilder();
doc = builder.parse(is);
}catch(Exception e){
e.printStackTrace();
}
return doc;
}
public static <T> Document Marshal2Node(T t,Class c) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(c);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //格式化XML
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
//自定义命名空间前缀
NamespacePrefixMapper mapper = new PreferredMapper();
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
QName q = new QName("", c.getSimpleName());
JAXBElement<T> rootElement = new JAXBElement<T>(q,
c, t);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db;
Document doc = null;
try {
db = dbf.newDocumentBuilder();
doc = db.newDocument();
marshaller.marshal(rootElement, doc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return doc;
}
//命名空间加前缀
public static class PreferredMapper extends NamespacePrefixMapper {
@Override
public String getPreferredPrefix(String namespaceUri,
String suggestion, boolean requirePrefix) {
return "m";
}
}
/**
* 反序列化XML
* @param cls
* @param objStr
* @param <T>
* @return
* @throws JAXBException
* @throws UnsupportedEncodingException
*/
public static <T> T UnMarshal(Class cls, String objStr) throws JAXBException, UnsupportedEncodingException
{
JAXBContext context = JAXBContext.newInstance(cls);
Unmarshaller unMarshaller = context.createUnmarshaller();
ByteArrayInputStream inputStream = new ByteArrayInputStream(objStr.getBytes("UTF-8"));
return (T)unMarshaller.unmarshal(inputStream);
}
}