Java高级特性第六章课后作业

1.编写XML结构文档,包括学生id、姓名、分数、学科。



	
		黄小破该
		java
		66
	
	
		郭宝宝
		数学
		77
	

2.使用DOM解析简答题1中编写的XML文档,输出所有学员的信息。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.dom4j.Node;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 * 输出所有学员信息类
 * 
 * @author suixin
 *
 */
public class ShowInfo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建DOM解析工厂实例
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		try {
			// 创建DOM解析器对象
			DocumentBuilder builder = builderFactory.newDocumentBuilder();
			Document document = builder.parse("score.xml"); // 解析score.xml文件

			NodeList list = document.getElementsByTagName("student"); // 读取scores
			for (int i = 0; i < list.getLength(); i++) {
				Element element = (Element) list.item(i);
				String id = element.getAttribute("id"); // 获得student的属性值
				// 获取student节点下的所有元素
				NodeList list2 = element.getChildNodes(); 
				System.out.println("ID:"+id);
				for (int j = 0; j < list2.getLength(); j++) {
					if ((list2.item(j).getNodeType() == Node.ELEMENT_NODE)) {
						System.out.println(list2.item(j).getNodeName()+":"+list2.item(j).getFirstChild().getNodeValue());
					}
				}
				System.out.println("");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

	}
}
3.使用DOM对简答题1保存成绩信息的XML做如下操作:

    1.删除ID为1的成绩。

    2.修改ID为2的成绩为60。

    3.添加一个学生的成绩信息(ID为3)。

import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 修改score.xml文件
 * @author suixin
 *
 */
public class Modification {
	
	DocumentBuilderFactory builderFactory = null; //DOM解析器工厂对象
	
	Document document = null;  //DOM数对象
	
	NodeList list = null; //节点集合
	
	DocumentBuilder builder = null;
	
	public static void main(String[] args) {
		Modification modification = new Modification();
//		modification.delete();
//		modification.amend();
//		modification.add();
	}
	
	/**
	 * 删除id为1的节点
	 */
	public  void delete() {
		builderFactory = DocumentBuilderFactory.newInstance();
		try {
			builder = builderFactory.newDocumentBuilder();
			document = builder.parse("score.xml");
			list = document.getElementsByTagName("student");
			for (int i = 0; i < list.getLength(); i++) {
				Node node = list.item(i);
				Element element = (Element) list.item(i);
				String id = element.getAttribute("id");
				if (id.equals("1") ) {  //如果id为1
					NodeList list2 = node.getChildNodes();   //拿到id为1的student的所有子节点
					for (int j = 0; j< list2.getLength(); j++) {
						Node node2 = list2.item(j);
						if ((node2.getNodeType() == Node.ELEMENT_NODE) && (node2.getNodeName().equals("score"))) {  //如果是score子节点
							Element element2 = (Element) node2;
							node.removeChild(element2);
						}
					}
				}
			}
			save("NewScore.xml");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 修改id为2的成绩为60
	 */
	public void amend() {
		builderFactory = DocumentBuilderFactory.newInstance();
		try {
			builder = builderFactory.newDocumentBuilder();
			document = builder.parse("score.xml");
			
			list = document.getElementsByTagName("score");
			Element element = (Element) list.item(1);
			element.setTextContent("60分");
			save("AmendScore.xml"); // 保存xml文件
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 添加id为2的成绩为60方法
	 */
	public  void add() {
		builderFactory = DocumentBuilderFactory.newInstance();
		try {
			builder = builderFactory.newDocumentBuilder();
			document = builder.parse("score.xml");
			
			list = document.getElementsByTagName("scores");
			//新建student节点
			Element element = document.createElement("student");
			element.setAttribute("id", "3");
			
			//新建name节点
			Element element2 = document.createElement("name");
			element2.setTextContent("蒋宝宝");
			
			//新建course节点
			Element element3 = document.createElement("course");
			element3.setTextContent("java");
			
			//创建score节点
			Element element4 = document.createElement("score");
			element4.setTextContent("88");
			
			//添加student节点里面的子节点
			element.appendChild(element2);
			element.appendChild(element3);
			element.appendChild(element4);
			
			list.item(0).appendChild(element); //添加student节点
			save("AddScore.xml"); // 保存xml文件
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	/**
	 * 保存修改后的xml文件
	 */
	public void save(String path) {
		TransformerFactory factory = TransformerFactory.newInstance();
		try {
			Transformer transformer = factory.newTransformer();
			DOMSource domSource = new DOMSource(document);
			
			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			StreamResult result = new StreamResult(new FileOutputStream(path));
			transformer.transform(domSource, result);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
}

4.使用DOM4J解析简答题1描述成绩信息的XML,输出成绩信息。

import java.io.File;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 使用DOM4j显示DOM树信息
 * @author suixin
 *
 */
public class DOM4jShowInfo {

	Document document = null;  //DOM4j下的DOM树对象
	/**
	 * 加载DOM树
	 */
	public void loadDOM() {
		SAXReader reader = new SAXReader();
		try {
			document = reader.read(new File("score.xml"));
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 显示XML文件
	 */
	public void showInfoXML() {
		Element root = document.getRootElement();  //拿到根节点
		Iterator rootIterator = root.elementIterator();
		while (rootIterator.hasNext()) {  //循环student
			Element  studentElement = (Element) rootIterator.next();
			String idStr = studentElement.attributeValue("id");  //id的属性值;
			System.out.println("id:"+idStr);
			
			Iterator studentChild = studentElement.elementIterator(); //student下的字节点
			while (studentChild.hasNext()) {  //循环student下的子节点
				Element stuChildElement = (Element) studentChild.next();
				String nodeName = stuChildElement.getName(); //子节点名
				String nodeText = stuChildElement.getText(); //子节点内容
				System.out.println(nodeName+ ":"+nodeText);
			}
			System.out.println("");
		}
	}
	
	public static void main(String [] args) {
		DOM4jShowInfo dom = new DOM4jShowInfo();
		dom.loadDOM();
		dom.showInfoXML();
	}
}

你可能感兴趣的:(Java高级特性与实战项目)