Funktionen
Vereinfachte API;
Keine Zuordnungsdateien
Hohe Leistung; geringer Speicherverbrauch;
Ordentliches XML; Keine Notwendigkeit, Objekte zu ändern, unterstützt interne private Felder; >
Keine Setter-/Getter-Methoden erforderlich;Detaillierte Fehlerdiagnose;
Gemeinsame Xstream-Anmerkungen
@XStreamImplicit implizite Sammlung
@XStreamConverter(SingleValueCalendarConverter.class) Injektionskonvertierungskonverter, Ziel: Objekt
@XStreamAsAttribute In Attribut konvertieren, Ziel: Feld
@XStreamOmitField Feld ignorieren, Ziel: Feld
Beispiel
1. XML-Toolklasse analysieren
2. Klasse „Schreiben“3. Klasse „Schreiben“
5. Operationsergebnisseimport com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; /** * 输出xml和解析xml的工具类 */ public class XmlUtil { private static final Logger logger = LoggerFactory. getLogger(XmlUtil.class); /** * java 转换成xml * @param obj 对象实例 * @return String xml字符串 * @Title: toXml * @Description: TODO */ public static String toXml(Object obj) { //XStream xstream=new XStream(); //默认使用xpp解析器 //指定编码解析器 XStream xstream = new XStream(new DomDriver("utf-8")); //启用注解识别 xstream.processAnnotations(obj.getClass()); return xstream.toXML(obj); } /** * 将传入xml文本转换成Java对象 * @param xmlStr * @param cls xml对应的class类 * @return T xml对应的class类的实例对象 */ public static <T> T toBean(String xmlStr, Class<T> cls) { XStream xstream = new XStream(); xstream.processAnnotations(cls); T obj = (T) xstream.fromXML(xmlStr); return obj; } /** * 写到xml文件中去 * @param obj 对象 * @param absPath 绝对路径 * @param fileName 文件名 */ public static boolean toXMLFile(Object obj, String absPath, String fileName) { String strXml = toXml(obj); String filePath = absPath + fileName; File file = new File(filePath); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { logger.error("file creation failed, cause is {}", e); return false; } } OutputStream ous = null; try { ous = new FileOutputStream(file); ous.write(strXml.getBytes()); ous.flush(); } catch (Exception e1) { logger.error("file write failed, cause is {}", e1); return false; } finally { if (ous != null) try { ous.close(); } catch (IOException e) { e.printStackTrace(); } } return true; } /** * 从xml文件读取报文 * @param absPath 绝对路径 * @param fileName 文件名 * @param cls */ public static <T> T toBeanFromFile(String absPath, String fileName, Class<T> cls) throws Exception { String filePath = absPath + fileName; InputStream ins = null; try { ins = new FileInputStream(new File(filePath)); } catch (Exception e) { throw new Exception("read {" + filePath + "} file failed!", e); } XStream xstream = new XStream(); xstream.processAnnotations(cls); T obj = null; try { obj = (T) xstream.fromXML(ins); } catch (Exception e) { throw new Exception("parse {" + filePath + "} file failed!", e); } if (ins != null) ins.close(); return obj; } }
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamImplicit; import java.util.List; @XStreamAlias(value = "teacher") public class Teacher { @XStreamAsAttribute private String name; @XStreamAsAttribute private String phone; @XStreamAsAttribute private int age; @XStreamImplicit(itemFieldName = "student") private List<Student> students; public Teacher() { } public Teacher(String name, String phone, int age, List<Student> students) { this.name = name; this.phone = phone; this.age = age; this.students = students; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes des XML-Parsing-Toolkits Xstream. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!