`
123629996
  • 浏览: 295226 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

XML生成实体对象

 
阅读更多

在此记录一个xml的工具类,该类可以读取xml文件,存入磁盘,并将xml转换为实体对象。

package com.sgcc.ahepc.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XMLUtil {
	public static Document parse(String path) throws DocumentException{  
        SAXReader reader = new SAXReader();  
        return reader.read(new File(path));  
    }  
	
	public static Document parse(InputStream in) throws DocumentException{  
        SAXReader reader = new SAXReader();  
        return reader.read(in);  
    }  
	public static Document parse(URL url) throws DocumentException{  
        SAXReader reader = new SAXReader();  
        return reader.read(url);  
    } 
	
	/**
	 * X-path的查找方式
	 * @param document
	 */
	@SuppressWarnings("unchecked")
	public static List<Element> xpathFind(Document document,String nodes){
		List<Element> list = document.selectNodes(nodes);
		return list;
	}
	public static String writeXMLToDist(Document document,String basePath,String fileName) throws IOException {
		File file = new File(basePath+fileName);
		 OutputFormat format = OutputFormat.createPrettyPrint();
		 format.setEncoding("UTF-8");
		//XMLWriter writer = new XMLWriter(new FileWriter(file),format);
		 XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
		writer.write(document);
		writer.close();
		return basePath+fileName;
	}
	/**
	 * 该方法能返回单对象Bean
	 * @param document
	 * @param xpath 路径“/aaa/bbb”
	 * @param obj 传入的实体对象
	 * @return 返回该实体对象,使用时强转
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static Object convertXMLToBean(Document document,String xpath, Object obj) throws Exception {
		String basePath = xpath;
		Class c = obj.getClass();
		Field[] fields = c.getDeclaredFields();
		for(int i=0;i<fields.length;i++){
			String name = fields[i].getName();
			String methodName = "set"+name.substring(0,1).toUpperCase()+name.substring(1);
			Node node = document.selectSingleNode(basePath+"/"+name.toUpperCase());
			if(node == null){
				continue;
			}
			Method method = c.getDeclaredMethod(methodName,String.class);
			method.invoke(obj, node.getText());
		}
		return obj;
	}
	/**
	 * 用于变量计划型  注意传入的实体类需要提供getBean的方法,返回一个新实体
	 * @param document
	 * @param xpath
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static Object convertXMLToBeans(Document document, String xpath,
			Object obj) throws Exception {
		List<Object> lists = new ArrayList<Object>();
		List list = document.selectNodes(xpath);
		for (int i = 0; i < list.size(); i++) {
			Element elements = (Element) list.get(i);
			for (Iterator<Element> j = elements.elementIterator(); j.hasNext();) {
				Element element = j.next();
				Class d = obj.getClass();
				Field[] dfields = d.getDeclaredFields();
				Method instance = d.getMethod("getBean");
				Object newObj = instance.invoke(obj);
				for (int k = 0; k < dfields.length; k++) {
					String name = dfields[k].getName();
					String methodName = "set"
							+ name.substring(0, 1).toUpperCase()
							+ name.substring(1);
					Node node = element.selectSingleNode(name.toUpperCase());
					if (node == null) {
						continue;
					}
					Method method = d.getDeclaredMethod(methodName,
							String.class);
					method.invoke(newObj, node.getText());
				}
				lists.add(newObj);

			}
		}

		return lists;
	}
	
	
}

 该类支持无属性的xml转换为实体bean,节点的名称和实体bean的名称一致,多个bean的的xml需要在实体类中提供getBean()的方法,整体采用java反射的机制进行,还比较实用。

分享到:
评论

相关推荐

    xml与实体类转换工具

    1. **解析XML**:使用`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`来解析XML字符串,生成一个`org.w3c.dom.Document`对象。 2. **创建实体类的Java类型信息**:JAXB需要知道实体类的结构,通过`@...

    xml映射实体对象

    自己写的一个xml映射实体对象类,附件为一个AXIS客户端代码生成文档

    java-xml自动生成对象实体以及与xml相互转化.zip_Java doc转xml_java xml 转 实体_java 毕

    标题中的“java-xml自动生成对象实体以及与xml相互转化”指的是使用Java技术将XML文件转换为Java对象(即Java Bean),反之亦然。这一过程通常涉及到以下几个关键知识点: 1. **Java DOM解析器**:DOM(Document ...

    通过xsd产生C#实体类解析XML或生成XML

    本教程将详细介绍如何使用XSD文件生成C#实体类,以便于解析XML数据和生成XML文档。 首先,我们需要一个XSD文件,它定义了XML文档的结构和数据类型。XSD文件使用元素、属性和约束来描述XML文档的结构。例如,一个...

    xml文件自动转成java对象工具

    5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...

    CodeSmith生成XML的实体类(C#)

    C#实体类则是将XML数据结构映射到面向对象的编程模型,使得我们可以方便地操作XML中的数据。 生成XML的C#实体类通常涉及到以下步骤: 1. **理解XML结构**:首先,你需要理解要处理的XML文档的结构。这包括根元素、...

    Freemarker代码生成器实体映射xml的ftl模板文件

    在这个场景下,"Freemarker代码生成器实体映射xml的ftl模板文件"是指利用Freemarker模板技术来创建一个用于生成XML实体映射文件的模板。这个`XML.ftl`文件就是核心,它是Freemarker模板的实例,其中定义了如何根据...

    实体类生成XML格式字符串

    在Java编程中,有时我们需要将实体类对象转换成XML格式的字符串,这在数据交换、存储或网络传输中非常常见。这个过程通常涉及到对象序列化和XML处理技术。本篇文章将详细讲解如何根据实体类生成XML格式的字符串,并...

    使用Hibernate逆向生成实体类的方法(注解和hbm.xml映射文件)

    - 对于通过hbm.xml生成的实体类,需要在hibernate.cfg.xml中添加相应的映射文件路径。 3. **测试连接**: - 运行测试程序,验证Hibernate是否能够正确读取映射信息并与数据库交互。 通过以上步骤,我们不仅能够...

    ibtas根据XML生成对应实体类

    2. **XML配置文件**: 在这个场景中,XML文件是generator.xml,它是IBTAS用来定义生成实体类规则的配置文件。这个文件通常包含了数据库连接信息(如URL、用户名、密码)、目标表名、实体类命名规则等。通过修改driver...

    xml转对象封装的简单与复杂xml的转化写法

    1. **JDOM库**:JDOM是Java Document Object Model的缩写,它提供了一种在内存中表示XML文档的方式,通过创建SAXBuilder或DOMBuilder实例解析XML文件,生成Element对象树。JDOM提供了丰富的API来操作这些对象,包括...

    generator-连接数据库生成实体类和mybatis的xml文件

    总的来说,"generator-连接数据库生成实体类和mybatis的xml文件"这一主题涵盖了数据库连接、代码生成工具的使用、MyBatis的实体类和XML配置文件的理解等多个重要知识点。通过熟练掌握这些内容,开发者可以有效地提高...

    逆向生成工具,有数据库表生成java bean实体类

    这个XML文件包含了工具所需的参数,如数据库连接信息(包括数据库URL、用户名和密码)、需要逆向生成的数据库表名以及生成实体类的相关设置。例如,你可以指定实体类的包名、类名前缀、是否生成getter和setter方法、...

    mybatis实体对象生成(代码生成器).zip

    本压缩包“mybatis实体对象生成(代码生成器).zip”提供了一个工具,能够自动生成MyBatis项目的DAO层、Model层以及Mapper映射文件,极大地提高了开发效率。 首先,我们来看“generatorConfig.xml”文件。这是...

    自动生成Mybatis 实体类、DaoMapper、XML可视化界面工具

    - 在Mybatis中,实体类的属性通常会与XML映射文件中的结果映射(resultMap)对应,使得在查询时可以自动将数据库结果转化为实体对象。 2. **DaoMapper接口**: - Dao(Data Access Object)接口定义了对数据库的...

    Hibernate-tools解决hbm.xml中文注释乱码和生成实体类注释

    接着,通过命令行或者集成到构建工具(如Maven或Gradle)中运行`Hibernate-tools`,执行反编译数据库模式、生成实体类等任务。 4. **自定义模板** `Hibernate-tools`允许开发者自定义模板,以满足特定的代码风格和...

    java 通过模板生成 xml,发送报文

    总结起来,Java通过模板生成XML并发送报文涉及XML文档对象的创建、元素的构建、模板引擎的应用以及HTTP请求的发送。理解这些概念并熟练掌握相关API,能帮助开发者在实际工作中高效地处理XML数据的生成与传输。

    xmljson生成实体类

    标题“xmljson生成实体类”指的是一个工具,它可以自动化地将XML或JSON格式的数据转换为Java实体类。这种工具通常会分析XML或JSON结构,然后自动生成对应的Java类,这些类包含了与原始数据相对应的属性和getter/...

    mybatis自动生成Java实体类和映射文件的自动生成类工具

    3. **生成实体类**:根据表的字段信息,工具会自动生成对应的Java实体类,每个字段对应类的一个属性,字段类型则转化为对应的Java类型。 4. **生成Mapper接口**:同时,工具还会创建一个Mapper接口,接口中包含与表...

    mybatis 自动生成实体类,xml配置

    7. **使用生成的实体类和 XML**:现在,你可以在代码中直接使用生成的实体类进行 CRUD 操作,MyBatis 会根据 XML 配置文件自动执行对应的 SQL 语句。 通过这个工具,开发者可以节省大量的手动编写代码的时间,更...

Global site tag (gtag.js) - Google Analytics