ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

h2数据库 xml-dom4j

2021-01-16 10:29:56  阅读:270  来源: 互联网

标签:xml String dom4j h2 writer Element id document 节点


前言

进公司实习干的第一件事,把一个H2数据库内容提取出来并以xml格式保存,以前从未接触过,记录一下代码和过程。


一、H2数据库是什么?

H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中。最常使用的用途就在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。

h2下载地址(注意:一定要下载相同版本的,不然打不开,要是发现就是连不上,肯定是版本错了。)

基本使用教程

二、使用步骤

1.资源

JDOM包下载地址
DOM4J包下载地址
(jdom和dom4j只能用一个)
dom4j的使用流程和常用方法

相关方法:
一.Document对象相关
1.读取XML文件,获得document对象.

SAXReader reader = new SAXReader();
Document document = reader.read(new File(“input.xml”));

2.主动创建document对象.

Document document = DocumentHelper.createDocument();
Element root = document.addElement(“members”);// 创建根节点

二.节点相关、
1.获取文档的根节点.

Element rootElm = document.getRootElement();

2.取得某节点的单个子节点.

Element memberElm=root.element(“member”);// "member"是节点名

3.取得节点的文字

String text=memberElm.getText();
也可以用:
String text=root.elementText(“name”);这个是取得根节点下的name子节点的文字.

4.取得某节点下名为"member"的所有字节点并进行遍历.

取根节点下所有子节点的集合:
List nodes = rootElm.elements(“member”);
for (Iterator it = nodes.iterator(); it.hasNext(); ) {
Element elm = (Element) it.next();
// do something
}

5.在某节点下添加子节点.

Element ageElm = newMemberElm.addElement(“age”);

6.设置节点文字.

ageElm.setText(“29”);
ageElm.addCDATA(str); //文本加上CDATA进行保护

7.删除某节点.

parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点

三.属性相关.
1.取得某节点下的某属性

Element root=document.getRootElement();
Attribute attribute=root.attribute(“size”);// 属性名name

2.取得属性的文字

String text=attribute.getText();
也可以用:
String text2=root.element(“name”).attributeValue(“firstname”);这个是取得根节点下name子节点的属性firstname的值.

3.遍历某节点的所有属性

Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext(); ){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}

4.设置某节点的属性和文字.

newMemberElm.addAttribute(“name”, “sitinspring”);

5.设置属性的文字

Attribute attribute=root.attribute(“name”);
attribute.setText(“sitinspring”);

6.删除某属性

Attribute attribute=root.attribute(“size”);// 属性名name
root.remove(attribute);

四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.

XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”));
writer.write(document);
writer.close();

2.文档中含有中文,设置编码格式写入的形式.

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(“GBK”); // 指定XML编码
XMLWriter writer = new XMLWriter(new FileWriter(“output.xml”),format);
writer.write(document);
writer.close();

2.代码

提取写入:

    // 数据库连接URL,当前连接的是E:/H2目录下的gacl数据库
	private static final String JDBC_URL = "jdbc:h2:F:/tool-cc/prdl-rulesdb";
	// 连接数据库时使用的用户名
	private static final String USER = "";
	// 连接数据库时使用的密码
	private static final String PASSWORD = "";
	// 连接H2数据库时使用的驱动类,org.h2.Driver这个类是由H2数据库自己提供的,在H2数据库的jar包中可以找到
	private static final String DRIVER_CLASS = "org.h2.Driver";

	public static void main(String[] args) throws Exception {
		Connection conn = null; // 数据库连接
		Statement stmt = null; // 数据库操作
		ResultSet rs = null; // 保存查询结果
		String sql = "SELECT * FROM RULE"; // 要执行的SQL语句,从RULE表中查询所有数据

		try {
			Class.forName(DRIVER_CLASS).newInstance(); // 加载驱动程序
			System.out.println("加载驱动程序成功!");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		try {
			conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
			System.out.println("连接数据库!");
			if (!conn.isClosed()) {
				System.out.println("Succeeded connecting to the Database!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		System.out.println(conn);

		try {
			stmt = conn.createStatement(); // 创建statement类对象,用来执行SQL语句
		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			rs = stmt.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		String fileName = "D://RULE.xml";  		  
	    Document document = DocumentHelper.createDocument();// 建立document对象,用来操作xml文件 
	    Element root = document.addElement("prdl-rulesdb");
	    while(rs.next()) {
	    	String id = rs.getString("NAME"); // 取得id内容
	 		int level = rs.getInt("SEVERITY") + 1; // 取得level内容
	 		String html = rs.getString("SPEC"); // 取得html内容
	 		String prdl = rs.getString("PRDL"); // 取得prdl内容
	 	    // 建立根节点  	    	  
	 	    Element table = root.addElement("RULE"); 
	 	    
	 	    Element did = table.addElement("id");  
	 	    did.setText(id);
	 	    Element dlevel = table.addElement("lever"); 
	 	    dlevel.setText(String.valueOf(level));
	 	    Element dhtml = table.addElement("html");  
	 	    dhtml.addCDATA(html);
	 	    Element dprdl = table.addElement("prdl"); 
	 	    dprdl.addCDATA(prdl);
	 	    
	 	   String regEx1 = "^*+\\.+\\d+\\.+\\d";
	 	   Pattern pattern1 = Pattern.compile(regEx1);
	 	   Matcher matcher1 = pattern1.matcher(id);
	 	   boolean r1 = matcher1.find();
	 	   if(r1) {
	 		  table.addAttribute("id", "GJB_5369");
	 	   }
	 	   
	 	   String regEx2 = "MISRA*";
	 	   Pattern pattern2 = Pattern.compile(regEx2);
	 	   Matcher matcher2 = pattern2.matcher(id);
	 	   boolean r2 = matcher2.find();
	 	   if(r2) {
	 		  table.addAttribute("id", "MISRA");
	 	   }
	 	   
	 	   String regEx3 = "SJT*";
	 	   Pattern pattern3 = Pattern.compile(regEx3);
	 	   Matcher matcher3 = pattern3.matcher(id);
	 	   boolean r3 = matcher3.find();
	 	   if(r3) {
	 		  table.addAttribute("id", "SJT");
	 	   }	 	   
	    }
	    OutputFormat xmlFormat = OutputFormat.createPrettyPrint();
	    xmlFormat.setEncoding("utf-8");
	    XMLWriter writer = new XMLWriter(new FileOutputStream(new File(fileName)), xmlFormat);
	    writer.write(document);
	    writer.close();
		try {
			conn.close(); // 关闭数据库
		} catch (SQLException e) {
			e.printStackTrace();
		}
		rs.close();
	}

xml去重:

SAXReader reader = new SAXReader();
		Document  document = reader.read(new File("D://RULEa.xml"));
		//取根节点
		Element rootElm = document.getRootElement();
		
		List<Element> rules=rootElm.elements();
		
		for (int i = 0; i < rules.size()-1; i++)
        {
			Element rule = (Element) rules.get(i);
			Element eid=rule.element("id");
            String id = eid.getText();
            for (int j = i + 1; j < rules.size(); j++)
            {
            	Element rule_next = (Element) rules.get(j);
            	Element eid_next=rule_next.element("id");
                String id_next = eid_next.getText();
                if (id.equals(id_next))
                {
                	rootElm.remove(rule_next);
                }
            }
        }  		
		XMLWriter writer=null;		  
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		FileOutputStream fos=new FileOutputStream(new File("D://RULEb.xml"));
		writer=new XMLWriter(fos,format);
		writer.write(document);
		if(writer!=null){
		    try{
		     writer.close();
		    }catch(IOException e){
		     e.printStackTrace();
		    }
		  };	
        }	

标签:xml,String,dom4j,h2,writer,Element,id,document,节点
来源: https://blog.csdn.net/qq_45921321/article/details/112691729

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有