Java的XML文件操作

一百、Dom
(1)、创建树


	// 获取树对象(反射)
	DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
	// 创建树
	Document dtree = db.newDocument();
	// 通过树来创建标签
	Element databases = dtree.createElement("databases");
	// 1、将标签填入到树中
	dtree.appendChild(databases);
	for (int i = 0; i < 3; i++) {
		// 2、创建databases的子标签
		Element database = dtree.createElement("database");
		// 创建database的子标签
		Element url = dtree.createElement("url");
		Element user = dtree.createElement("user");
		Element password = dtree.createElement("password");
		// 子标签复赋值	url.setTextContent("jdbc:mysql://localhost:3306/aowin");
		user.setTextContent("root");
		password.setTextContent("163041");
		// 3、将子标签添到database中
		database.appendChild(url);
		database.appendChild(user);
		database.appendChild(password);
		// 4、给标签的子标签database赋属性值
		database.setAttribute("id", i + "" + 1);
		// 5、将student添加到databases中
		databases.appendChild(database);
	}
	Transformer tf = TransformerFactory.newInstance().newTransformer();
	// 将树作为传输对象
	Source xmlSource = new DOMSource(dtree);
	Result outputTarget = new StreamResult(f);
	tf.transform(xmlSource, outputTarget);
	

(2)、获取树


	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	DocumentBuilder db = dbf.newDocumentBuilder();
	// 获得指定xml文件的树形结构
	Document d = db.parse(f);
	// Dom两种方式获取数据:
	// 2.从根节点开始遍历
	// 获取文件根节点
	Element databases = (Element)d.getFirstChild();// 获取根节点
	// 获取根节点的子节点集合
	NodeList list = databases.getChildNodes();
	// 遍历子节点集合
	for (int i = 0; i < list.getLength(); i++) {
		// 获取子节点的子节点集合
		Element database = (Element) list.item(i);
		System.out.println("id:" + database.getAttribute("id"));
		NodeList child = database.getChildNodes();
		// 遍历输出所有子节点
		for (int j = 0; j < child.getLength(); j++) {
			Element childs = (Element) child.item(j);
			System.out.println("   " + childs.getTagName() + ":" + childs.getTextContent());
		}
	}
	

一百零一、dom4j
(1)、创建树


	// 获得树对象
	Document d = DocumentHelper.createDocument();
	// 创建根节点
	Element databases = d.addElement("databases");
	// 给根节点添加3个子节点
	for (int i = 0; i < 3; i++) {
		// 添加子节点
		Element database = databases.addElement("database");
		// 给database赋属性值
		database.addAttribute("id", i + "" + 1);
		for (int j = 0; j < 1; j++) {
			// 给子节点添加子节点
			Element url = database.addElement("url");
			Element user = database.addElement("user");
			Element password = database.addElement("password");
			// 设置值
			url.setText("jdbc:mysql://localhost:3306/aowin");
			user.setText("root");
			password.setText("163041");
		}
	}
	// 写入指定文件
	FileWriter fw = new FileWriter(f);
	// 第二个参数可加可不加,是美化输出
	XMLWriter x = new XMLWriter(fw, OutputFormat.createPrettyPrint());
	x.write(d);
	fw.close();
	

(2)、获取树


	SAXReader sr = new SAXReader();
	Document d = sr.read(f);
	// 只能从根节点访问
	// 获取根节点
	Element students = d.getRootElement();
	// 获得子节点集合
	List<Element> l = students.elements();
	// 遍历子节点集合
	for (Element e : l) {
		// 设置属性
		System.out.println("id:" + e.attributeValue("id"));
		// 子节点的子节点集合
		List<Element> child = e.elements();
		// 遍历子节点的子节点集合
		for (Element c : child) {
			System.out.println("   " + c.getName() + ":" + c.getText());
		}
	}
	

一百零二、将XML文件的数据插入到数据库中


		String sql = "insert into apple values (?, ?, ?)";
		try {
			conn = DbUtils.getConnection();
			ps = conn.prepareStatement(sql);
			// 读取xml文件,按路径读取,获得document对象
			Document doc = new SAXReader().read(file);
			// 获取根节点
			Element students = doc.getRootElement();
			// 获得子节点集合
			List<Element> l = students.elements();
			// 遍历读出xml中的节点
			for (Iterator iter = l.iterator(); iter.hasNext();) {
				Element el = (Element) iter.next();
				// 读取节点的内容并赋值
				String id = el.elementText("id");
				String color = el.elementText("color");
				String money = el.elementText("money");
				// 为sql语句赋值
				ps.setString(1, id);
				ps.setString(2, color);
				ps.setString(3, money);
				ps.addBatch();
			}
			// 批量执行sql语句
			try {
				ps.executeBatch();
				System.out.print("将XML导入数据库成功");
			} catch (BatchUpdateException e) {
				System.out.println(e.getMessage());
				System.out.println("数据类型不匹配!!!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DbUtils.closeAll(conn, ps, null);
		}
		

一百零三、将数据库中的信息插入到XML文件中


		boolean b = false;
		// 获得树对象
		Document d = DocumentHelper.createDocument();
		// 创建根节点
		Element databases = d.addElement("databases");
		// 创建一个集合
		hset = new HashSet<Integer>();
		// 获取从数据库中获得数据并添加到al这个集合中
		List<Apple> al = selectMysql();
		for (int i = 0; i < al.size(); i++) {
			Apple s = al.get(i);
			// 在通过Apple 这个对象将数据转存到hash集合中去。
			hset.add(s.getId());
		}
		for (int k = 0; k < 1; k++) {
			// 通过循环将集合中的数据形成一种dom4j树
			for (Iterator<Integer> it = hset.iterator(); it.hasNext();) {
				Integer classId = it.next();
				// 创建子节点
				Element classEle = databases.addElement("database");
				classEle.addAttribute("id", k + "" + 1);
				// 创建子节点的子节点
				for (int i = 0; i < 1; i++) {
					Apple s = al.get(i);
					if (classId.equals(s.getId())) {
//						Element studentEle = classEle.addElement("apple");
						classEle.addElement("id").addText(s.getId() + "");
						classEle.addElement("color").addText(s.getColor());
						classEle.addElement("money").addText(s.getMoney() + "");
					}
				}
			}
		}
		try {
			// 编写输出格式
			OutputFormat format = null;
			// 生成压缩格式、紧凑格式的xml 其中的compact format 翻译:压缩格式
			format = OutputFormat.createPrettyPrint();
			// 将document 也就是这个dom4j树输出到指定 path 下的.xml文件中去
			XMLWriter writer = new XMLWriter(new FileWriter(f), format);
//			format.setEncoding("gb2312");
			writer.write(d);
			writer.close();
			b = true;
			System.out.print("将数据库信息导入XML文件成功");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return b;

一百零四、查询数据库


		conn = DbUtils.getConnection();
		String sql = "select * from apple where id=?";
		ps = conn.prepareStatement(sql);
		ps.setInt(1, 123);
		rs = ps.executeQuery();//返回布尔类型,代表语句是否执行成功
		List<Apple> l = new ArrayList<Apple>();
		while (rs.next()) {
			Apple p = new Apple();
			p.setId(rs.getInt("id"));
			p.setColor(rs.getString("color"));
			p.setMoney(rs.getInt("money"));
			l.add(p);
		}
		DbUtils.closeAll(conn, ps, rs);
		return l;
		
发布了51 篇原创文章 · 获赞 11 · 访问量 6109

猜你喜欢

转载自blog.csdn.net/weixin_42140261/article/details/94599007
今日推荐