Java基础之XML(DOM解析和创建)

版权声明:学习之路,任重道远 https://blog.csdn.net/weixin_43359405/article/details/83930541

代码如下:

package com.briup.DOMXML;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMXMLTest {
	private List<Student> list;
	private String Address[] = { "湖南", "上海", "湖北", "新疆", "北京", "天津", "河北" };
	private String Name[] = { "张三", "李四", "小米", "小明", "王五", "胡六", "利利" };

	public DOMXMLTest() {
		this.list = new ArrayList<Student>();
	}

	public void FileWriterStudentXML(String address) {
		// /树结构的建立xml文件
		// /第一步:建立一个文件解析工厂
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// /第二步:建立一个组件文件
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
			// /第三步:建立一个文件
			Document dcm = db.newDocument();
			// /创建一个根目录
			Element stus = dcm.createElement("stus");
			dcm.appendChild(stus);
			/*
			 * // /第三步:获取个体 Element stu = dcm.createElement("stu");
			 * stus.appendChild( stu ); // /第四步:获取stu的属性 stu.setAttribute("id",
			 * "t1"); stu.setAttribute("name", "张三"); ///第五步:获取子标签 Element child
			 * = dcm.createElement("address"); child.setTextContent("湖南");
			 * stu.appendChild( child );
			 */
			// /获取10个个体
			for (int i = 0; i < 10; i++) {
				// /新建一个个体
				Element stu = dcm.createElement("stu");
				stus.appendChild(stu);
				// /第四步:获取stu的属性
				stu.setAttribute("id", "t" + i + 1);
				stu.setAttribute("name",
						Name[(int) (Math.random() * Name.length)]);
				// /第五步:获取子标签
				Element child = dcm.createElement("address");
				child.setTextContent(Address[(int) (Math.random() * Address.length)]);
				stu.appendChild(child);
			}
			// Text ContentAddress = dcm.createTextNode("湖南");
			// child.appendChild( ContentAddress );
			// /开始组件
			TransformerFactory tff = TransformerFactory.newInstance();
			Transformer tff2 = tff.newTransformer();
			tff2.transform(new DOMSource(dcm), new StreamResult(new File(
					address)));

		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}

	public void SaveDataatList(String Address) {
		Student stu = null;
		try {
			// /创建一个dom的解析工厂
			DocumentBuilderFactory domparsefactory = DocumentBuilderFactory
					.newInstance();
			// /创建一个dom的解析
			DocumentBuilder domparse = domparsefactory.newDocumentBuilder();
			// /新建解析文件xml
			File file = new File(Address);
			Document parse = domparse.parse(file);
			// /保存属性的根节点
			NodeList fatherNode = parse.getElementsByTagName("stu");
			for (int i = 0; i < fatherNode.getLength(); i++) {
				// /读取每一个节点
				Element fatherElement = (Element) fatherNode.item(i);
				stu = new Student();
				// /获取id和money的属性值
				String id = fatherElement.getAttribute("id").trim();
				stu.setId(id);
				String name = fatherElement.getAttribute("name").trim();
				stu.setName(name);
				// /获取子属性的值
				NodeList childNode = fatherElement.getChildNodes();
				for (int j = 0; j < childNode.getLength(); j++) {
					if (childNode.item(j).getNodeType() == 1) {
						Element childElement = (Element) childNode.item(j);
						String address = childElement.getFirstChild().getNodeValue();
						stu.setAddress(address);
					}
				}
				list.add(stu);
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void printList() {
		System.out.println("总共存在student:" + list.size());
		for (int i = 0; i < list.size(); i++)
			System.out.println(list.get(i).toString());
	}

	public static void main(String[] args) {
		String address = "src/com/briup/DOMXML/Stus.xml";
		DOMXMLTest te = new DOMXMLTest();
		// /组件一个Stus.xml文件
		te.FileWriterStudentXML(address);
		// /保存数据到list中
		te.SaveDataatList(address);
		// /打印数据
		te.printList();
	}
}

StusXml文件自动创建:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<stus>
	<stu id="t01" name="小明">
		<address>湖北</address>
	</stu>
	<stu id="t11" name="小明">
		<address>天津</address>
	</stu>
	<stu id="t21" name="胡六">
		<address>湖南</address>
	</stu>
	<stu id="t31" name="李四">
		<address>湖南</address>
	</stu>
	<stu id="t41" name="小明">
		<address>河北</address>
	</stu>
	<stu id="t51" name="王五">
		<address>湖北</address>
	</stu>
	<stu id="t61" name="李四">
		<address>河北</address>
	</stu>
	<stu id="t71" name="王五">
		<address>天津</address>
	</stu>
	<stu id="t81" name="王五">
		<address>新疆</address>
	</stu>
	<stu id="t91" name="胡六">
		<address>河北</address>
	</stu>
</stus>

StudentJava文件:

package com.briup.DOMXML;

public class Student {
	private String id;
	private String name;
	private String address;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", address=" + address
				+ "]";
	}

	public Student(String id, String name, String address) {
		this.id = id;
		this.name = name;
		this.address = address;
	}
 
	public Student() {
		
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43359405/article/details/83930541