java高级特性与实战项目——第六章-课后作业

1.编写XML文档,具有值自行添加,至少添加2个学员的成绩信息,包括学生id、姓名、学科、分数。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Student>
	<student id="1">
		<Name>张三</Name>
		<course>语文</course>
		<score>80分</score>
	</student>
	<student id="2">
		<Name>小段</Name>
		<course>语文</course>
		<score>58分</score>
	</student>
</Student>


2.使用DOM解析,要求(1.删除id为1的成绩    2.修改id为2的成绩为60    3.添加一个id为3的学员信息)

package come.bdqn;

import java.io.FileOutputStream;

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

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Student {
	/**
	 * 获取文档
	 */
	DocumentBuilderFactory dbf = null;
	DocumentBuilder db = null;
	Document doc = null;
	public void gain() {
		//创建工厂
		dbf = DocumentBuilderFactory.newInstance();
		try {
			//从工厂获得解析器
			db = dbf.newDocumentBuilder();
			//解析XML文档
			doc = db.parse("Student.xml");
			NodeList stuList = doc.getElementsByTagName("student");
			for (int i = 0; i < stuList.getLength(); i++) {
				Node student = stuList.item(i);
				System.out.println("第"+(i+1)+"位学生的信息:");
				NamedNodeMap stu = student.getAttributes();
				for (int j = 0; j < stu.getLength(); j++) {
					Node stu1 = stu.item(j);
					System.out.println(stu1.getNodeName()+":"+stu1.getNodeValue());
				}
				NodeList Stu2 = student.getChildNodes();
				for (int j = 0; j < Stu2.getLength(); j++) {
					Node Student = Stu2.item(j);
					if(Stu2.item(j) instanceof Element) {
							System.out.println(Student.getNodeName()+":"+Student.getTextContent());
						}
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 删除节点
	 */
	public void delete() {
		try {
			db = dbf.newDocumentBuilder();
			Document doc = db.parse("Student.xml");
			NodeList list =  doc.getElementsByTagName("student");
			for (int i = 0; i < list.getLength(); i++) {
				Element element = (Element) list.item(i);
				String Name = element.getAttribute("id");
				if(Name.equals("1")) {
					element.getParentNode().removeChild(element);
				}
			}
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			DOMSource domSource = new DOMSource(doc);
			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			StreamResult result = new StreamResult(new FileOutputStream("Student.xml"));
			transformer.transform(domSource, result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 添加节点
	 */
	public void add() {
		//创建student,Name,course,score节点
		Element stuElement = doc.createElement("student");
		Element NaElement = doc.createElement("Name");
		Element couElement = doc.createElement("course");
		Element scoElement = doc.createElement("score");
		//元素节点
		Attr attr = doc.createAttribute("id");
		attr.setValue("3");
		//文本节点
		Text testname = doc.createTextNode("哈皮");
		Text testcou = doc.createTextNode("英语");
		Text testscore = doc.createTextNode("15");
		//将文本节点添加到元素的子节点
		NaElement.appendChild(testname);
		couElement.appendChild(testcou);
		scoElement.appendChild(testscore);
		//将元素节点添加到student
		stuElement.setAttributeNode(attr);
		stuElement.appendChild(NaElement);
		stuElement.appendChild(couElement);
		stuElement.appendChild(scoElement);
		//得到根元素
		Element men = doc.getDocumentElement();
		men.appendChild(stuElement);
		try {
			//保存文本
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			DOMSource domSource = new DOMSource(doc);
			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			StreamResult result = new StreamResult(new FileOutputStream("Student.xml"));
			transformer.transform(domSource, result);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	/**
	 * 修改信息
	 */
	public void amend() {
		NodeList list = doc.getElementsByTagName("student");
		for (int i = 0; i < list.getLength(); i++) {
			Element stuElement = (Element) list.item(i);
			String stu = stuElement.getAttribute("id");
			if(stu.equals("2")) {
				NodeList sco = stuElement.getElementsByTagName("score");
				Element element = (Element) sco.item(0);
				element.setTextContent("58分");
			}
			try {
				//保存文本
				TransformerFactory transformerFactory = TransformerFactory.newInstance();
				Transformer transformer = transformerFactory.newTransformer();
				DOMSource domSource = new DOMSource(doc);
				transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
				StreamResult result = new StreamResult(new FileOutputStream("Student.xml"));
				transformer.transform(domSource, result);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		Student student = new Student();
		student.gain();
		student.delete();
		student.amend();
		student.add();
	}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Student>
	
	<student id="2">
		<Name>小段</Name>
		<course>语文</course>
		<score>58分</score>
	</student>
<student id="3"><Name>哈皮</Name><course>英语</course><score>15</score></student></Student>


猜你喜欢

转载自blog.csdn.net/qq_41882685/article/details/80513447