


Exemples détaillés de méthodes de conversion mutuelle entre classes d'entités simples et fichiers XML
Cet article vous apporte principalement une méthode de conversion mutuelle entre classes d'entités simples et fichiers XML. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde. L'idée générale est la suivante : tant que je peux obtenir les informations de type de la classe d'entité, je peux obtenir tous les noms de champs et types de la classe d'entité. Les méthodes set et get des attributs sont encore plus simples et plus claires. le temps, j'ai seulement besoin d'utiliser la réflexion de la méthode, il suffit de lire les données du fichier XML et de les donner à cette réflexion. D'un autre côté, tant qu'on me donne un objet arbitraire, je peux obtenir les valeurs de tous les champs de l'objet par réflexion. À ce stade, je peux simplement écrire le fichier XML.
Le code spécifique est le suivant :
package com.pcq.entity; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class XMLAndEntityUtil { private static Document document = DocumentHelper.createDocument(); /** * 判断是否是个xml文件,目前类里尚未使用该方法 * @param filePath * @return */ @SuppressWarnings("unused") private static boolean isXMLFile(String filePath) { File file = new File(filePath); if(!file.exists() || filePath.indexOf(".xml") > -1) { return false; } return true; } /** * 将一组对象数据转换成XML文件 * @param list * @param filePath 存放的文件路径 */ public static <T> void writeXML(List<T> list, String filePath) { Class<?> c = list.get(0).getClass(); String root = c.getSimpleName().toLowerCase() + "s"; Element rootEle = document.addElement(root); for(Object obj : list) { try { Element e = writeXml(rootEle, obj); document.setRootElement(e); writeXml(document, filePath); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } } /** * 通过一个根节点来写对象的xml节点,这个方法不对外开放,主要给writeXML(List<T> list, String filePath)提供服务 * @param root * @param object * @return * @throws NoSuchMethodException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException */ private static Element writeXml(Element root, Object object) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class<?> c = object.getClass(); String className = c.getSimpleName().toLowerCase(); Element ele = root.addElement(className); Field[] fields = c.getDeclaredFields(); for(Field f : fields) { String fieldName = f.getName(); String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); Element fieldElement = ele.addElement(fieldName); Method m = c.getMethod("get" + param, null); String s = ""; if(m.invoke(object, null) != null) { s = m.invoke(object, null).toString(); } fieldElement.setText(s); } return root; } /** * 默认使用utf-8 * @param c * @param filePath * @return * @throws UnsupportedEncodingException * @throws FileNotFoundException */ public static <T> List<T> getEntitys(Class<T> c, String filePath) throws UnsupportedEncodingException, FileNotFoundException { return getEntitys(c, filePath, "utf-8"); } /** * 将一个xml文件转变成实体类 * @param c * @param filePath * @return * @throws FileNotFoundException * @throws UnsupportedEncodingException */ public static <T> List<T> getEntitys(Class<T> c, String filePath, String encoding) throws UnsupportedEncodingException, FileNotFoundException { File file = new File(filePath); String labelName = c.getSimpleName().toLowerCase(); SAXReader reader = new SAXReader(); List<T> list = null; try { InputStreamReader in = new InputStreamReader(new FileInputStream(file), encoding); Document document = reader.read(in); Element root = document.getRootElement(); List elements = root.elements(labelName); list = new ArrayList<T>(); for(Iterator<Emp> it = elements.iterator(); it.hasNext();) { Element e = (Element)it.next(); T t = getEntity(c, e); list.add(t); } } catch (DocumentException e) { e.printStackTrace(); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (NoSuchMethodException e1) { e1.printStackTrace(); } catch (SecurityException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (InvocationTargetException e1) { e1.printStackTrace(); } return list; } /** * 将一种类型 和对应的 xml元素节点传进来,返回该类型的对象,该方法不对外开放 * @param c 类类型 * @param ele 元素节点 * @return 该类型的对象 * @throws InstantiationException * @throws IllegalAccessException * @throws NoSuchMethodException * @throws SecurityException * @throws IllegalArgumentException * @throws InvocationTargetException */ @SuppressWarnings("unchecked") private static <T> T getEntity(Class<T> c, Element ele) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { Field[] fields = c.getDeclaredFields(); Object object = c.newInstance();// for(Field f : fields) { String type = f.getType().toString();//获得字段的类型 String fieldName = f.getName();//获得字段名称 String param = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);//把字段的第一个字母变成大写 Element e = ele.element(fieldName); if(type.indexOf("Integer") > -1) {//说明该字段是Integer类型 Integer i = null; if(e.getTextTrim() != null && !e.getTextTrim().equals("")) { i = Integer.parseInt(e.getTextTrim()); } Method m = c.getMethod("set" + param, Integer.class); m.invoke(object, i);//通过反射给该字段set值 } if(type.indexOf("Double") > -1) { //说明该字段是Double类型 Double d = null; if(e.getTextTrim() != null && !e.getTextTrim().equals("")) { d = Double.parseDouble(e.getTextTrim()); } Method m = c.getMethod("set" + param, Double.class); m.invoke(object, d); } if(type.indexOf("String") > -1) {//说明该字段是String类型 String s = null; if(e.getTextTrim() != null && !e.getTextTrim().equals("")) { s = e.getTextTrim(); } Method m = c.getMethod("set" + param, String.class); m.invoke(object, s); } } return (T)object; } /** * 用来写xml文件 * @param doc Document对象 * @param filePath 生成的文件路径 * @param encoding 写xml文件的编码 */ public static void writeXml(Document doc, String filePath, String encoding) { XMLWriter writer = null; OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(encoding);// 指定XML编码 try { writer = new XMLWriter(new FileWriter(filePath), format); writer.write(doc); } catch (IOException e) { e.printStackTrace(); } finally { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 默认使用utf-8的格式写文件 * @param doc * @param filePath */ public static void writeXml(Document doc, String filePath) { writeXml(doc, filePath, "utf-8"); } }
S'il existe une classe d'entité :
package com.pcq.entity; import java.io.Serializable; public class Emp implements Serializable{ private Integer id; private String name; private Integer deptNo; private Integer age; private String gender; private Integer bossId; private Double salary; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getDeptNo() { return deptNo; } public void setDeptNo(Integer deptNo) { this.deptNo = deptNo; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Integer getBossId() { return bossId; } public void setBossId(Integer bossId) { this.bossId = bossId; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } }
Alors le format du fichier XML écrit est comme suit :
<?xml version="1.0" encoding="utf-8"?> <emps> <emp> <id>1</id> <name>张三</name> <deptNo>50</deptNo> <age>25</age> <gender>男</gender> <bossId>6</bossId> <salary>9000.0</salary> </emp> <emp> <id>2</id> <name>李四</name> <deptNo>50</deptNo> <age>22</age> <gender>女</gender> <bossId>6</bossId> <salary>8000.0</salary> </emp> </emps>
Supposons qu'il existe une classe d'entité comme suit :
package com.pcq.entity; public class Student { private Integer id; private String name; private Integer age; private String gender; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
Alors le fichier XML écrit est le suivant
<?xml version="1.0" encoding="utf-8"?> <students> <student> <id></id> <name>pcq</name> <age>18</age> <gender>男</gender> </student> </students>
Vous devez également lire des fichiers XML dans ce format. Afin d'être converti en classe d'entité, les informations de type de classe (Classe) de la classe d'entité doivent être obtenues.
De plus, les types d'attributs des classes d'entités ici sont tous Integer, String et Double. Vous pouvez voir que seuls ces trois types sont jugés dans la classe d'outils. Et on peut s'attendre à ce que s'il existe une relation un-à-plusieurs, c'est-à-dire qu'une classe d'entité a un ensemble de références à un autre objet de classe,
alors la conversion mutuelle entre XML et la classe d'entité est beaucoup plus compliqué que la situation ci-dessus. Lz a dit qu'il ne serait peut-être pas possible de le faire dans un court laps de temps, voire dans un long laps de temps. J'apprécie les conseils de mes collègues experts.
Recommandations associées :
Implémentation simple de la lecture et de la sortie PHP des données de fichiers XML
Exemple de code de la méthode PHP de lecture des fichiers XML
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le numéro de série du disque dur est un identifiant important du disque dur et est généralement utilisé pour identifier de manière unique le disque dur et identifier le matériel. Dans certains cas, nous pouvons avoir besoin d'interroger le numéro de série du disque dur, par exemple lors de l'installation d'un système d'exploitation, de la recherche du pilote de périphérique approprié ou de la réparation du disque dur. Cet article présentera quelques méthodes simples pour vous aider à vérifier le numéro de série du disque dur. Méthode 1 : utilisez l’invite de commande Windows pour ouvrir l’invite de commande. Dans le système Windows, appuyez sur les touches Win+R, entrez « cmd » et appuyez sur la touche Entrée pour ouvrir la commande

Comment rédiger un générateur simple de rapports sur les performances des étudiants en utilisant Java ? Student Performance Report Generator est un outil qui aide les enseignants ou les éducateurs à générer rapidement des rapports sur les performances des élèves. Cet article explique comment utiliser Java pour rédiger un simple générateur de rapports sur les performances des étudiants. Tout d’abord, nous devons définir l’objet étudiant et l’objet note étudiant. L'objet étudiant contient des informations de base telles que le nom et le numéro de l'étudiant, tandis que l'objet score de l'étudiant contient des informations telles que les résultats des matières et la note moyenne de l'étudiant. Voici la définition d'un objet étudiant simple : public

Comment écrire un système de réservation en ligne simple via PHP. Avec la popularité d'Internet et la recherche de commodité des utilisateurs, les systèmes de réservation en ligne deviennent de plus en plus populaires. Qu'il s'agisse d'un restaurant, d'un hôpital, d'un salon de beauté ou d'un autre secteur de services, un simple système de réservation en ligne peut améliorer l'efficacité et offrir aux utilisateurs une meilleure expérience de service. Cet article explique comment utiliser PHP pour écrire un système de réservation en ligne simple et fournit des exemples de code spécifiques. Créer une base de données et des tables Tout d'abord, nous devons créer une base de données pour stocker les informations de réservation. Dans MonS

Démarrage rapide : implémentation d'un système de gestion de bibliothèque simple à l'aide des fonctions du langage Go Introduction : Avec le développement continu du domaine de l'informatique, les besoins en applications logicielles deviennent de plus en plus diversifiés. En tant qu'outil de gestion commun, le système de gestion de bibliothèque est également devenu l'un des systèmes nécessaires pour de nombreuses bibliothèques, écoles et entreprises. Dans cet article, nous utiliserons les fonctions du langage Go pour implémenter un système simple de gestion de bibliothèque. Grâce à cet exemple, les lecteurs peuvent apprendre l'utilisation de base des fonctions du langage Go et comment créer un programme pratique. 1. Idées de design : commençons par

Comment écrire un système simple de recommandation musicale en C++ ? Introduction : Le système de recommandation musicale est un point névralgique de la recherche dans les technologies de l'information modernes. Il peut recommander des chansons aux utilisateurs en fonction de leurs préférences musicales et de leurs habitudes comportementales. Cet article explique comment utiliser C++ pour écrire un système simple de recommandation musicale. 1. Collecter les données des utilisateurs Tout d'abord, nous devons collecter les données sur les préférences musicales des utilisateurs. Les préférences des utilisateurs pour différents types de musique peuvent être obtenues via des enquêtes en ligne, des questionnaires, etc. Enregistrer les données dans un fichier texte ou une base de données

Introduction à l'utilisation de PHP pour développer des fonctions simples de gestion de fichiers : Les fonctions de gestion de fichiers sont une partie essentielle de nombreuses applications Web. Il permet aux utilisateurs de télécharger, télécharger, supprimer et afficher des fichiers, offrant ainsi aux utilisateurs un moyen pratique de gérer les fichiers. Cet article expliquera comment utiliser PHP pour développer une fonction simple de gestion de fichiers et fournira des exemples de code spécifiques. 1. Créer un projet Tout d'abord, nous devons créer un projet PHP de base. Créez le fichier suivant dans le répertoire du projet : index.php : page principale, utilisée pour afficher la table d'upload

Comment écrire un jeu simple de démineur en C++ ? Minesweeper est un jeu de réflexion classique dans lequel les joueurs doivent révéler tous les blocs selon la disposition connue du champ de mines sans marcher sur les mines. Dans cet article, nous présenterons comment écrire un jeu simple de dragueur de mines en utilisant C++. Tout d’abord, nous devons définir un tableau bidimensionnel pour représenter la carte du jeu Minesweeper. Chaque élément du tableau peut être une structure utilisée pour stocker l'état du bloc, par exemple s'il est révélé, s'il y a des mines, etc. De plus, nous devons également définir

Guide de conception de tables MySQL : Création d'une table de présence des employés simple Dans la gestion d'entreprise, la gestion des présences des employés est une tâche cruciale. Afin d'enregistrer et de compter avec précision la présence des employés, nous pouvons utiliser la base de données MySQL pour créer une simple feuille de présence des employés. Cet article vous expliquera comment concevoir et créer cette table et fournira des exemples de code correspondants. Tout d’abord, nous devons identifier les champs obligatoires pour la feuille de présence des employés. De manière générale, les feuilles de présence des salariés doivent contenir au minimum les champs suivants : identifiant du salarié, date, temps de travail, temps de repos.
