第六章 XML

本章节聚焦于XML文档的处理,通过DOM解析技术详细介绍了如何读取并输出所有学员信息,同时涵盖如何利用DOM删除特定ID的成绩,修改已有成绩以及新增学生分数的操作。
1,编写XML文档,添加两个学员的成绩,包括学生id,姓名,分数,学科。
<?xml version="1.0" encoding="UTF-8"?>
<scores>
   <student id="1">
      <name>郭振</name>
      <course>JAVA</course>
      <score>60</score>
   </student>
   <student id="2">
      <name>段海峰</name>
      <course>JAVA</course>
      <score>78</score>
   </student>
</scores>

2,使用DOM解析第一题编写的XML文档,输出所有学员信息。

package com.bdqn.demo;

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 org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Student {
	 
	public static void main(String[] args) {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			try {
				DocumentBuilder builder = factory.newDocumentBuilder();
				Document doc =builder.parse("学员信息.xml");
				NodeList list = doc.getElementsByTagName("student");			
				for (int i = 0; i < list.getLength(); i++) {
					Node stu = list.item(i);
					Element element = (Element) stu;
					String num = element.getAttribute("id");
					System.out.println("编号:"+num);
					NodeList listName = element.getElementsByTagName("name");
					NodeList listCourse = element.getElementsByTagName("course");
					NodeList listScore = element.getElementsByTagName("score");
					for (int j = 0; j < listScore.getLength(); j++) {
						Element childName = (Element) listName.item(j);
						Element childCourse = (Element) listCourse.item(j);
						Element childScore = (Element) listScore.item(j);
						String name = childName.getFirstChild().getNodeValue();
						String course = childCourse.getFirstChild().getNodeValue();
						String score = childScore.getFirstChild().getNodeValue();
						System.out.println("姓名:"+name+"\n课程:"+course+"\n分数:"+score+"\n");
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}		
		}

	}

3,使用DOM对简答题1保存成绩信息的XML删除ID为1的成绩,修改ID为2的成绩为60.添加一个学生的成绩

package com.bdqn.demo;


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;

public class Student{
	Document doc = null;

	public static void main(String[] args) {
		Student stu = new Student();
		stu.load();
		stu.delete();
		stu.change();
		stu.save();
		stu.add();
		stu.save();
	}

	public void load() {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			doc = db.parse("学员信息.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void delete() {
		NodeList list = doc.getElementsByTagName("student");
		for (int i = 0; i < list.getLength(); i++) {
			Node stu = list.item(i);
			Element element = (Element) stu;
			String str = element.getAttribute("id");
			if (str.equals("1")) {
				element.getParentNode().removeChild(element);
			}
		}
	}

	public void save() {
		TransformerFactory tff = TransformerFactory.newInstance();
		try {
			Transformer tf = tff.newTransformer();
			DOMSource doms = new DOMSource(doc);
			tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			StreamResult result = new StreamResult(new FileOutputStream("学员信息.xml"));
			tf.transform(doms, result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void change() {
		NodeList nl = doc.getElementsByTagName("student");
		for (int i = 0; i < nl.getLength(); i++) {
			Node stu = nl.item(i);
			Element element = (Element) stu;
			String str = element.getAttribute("id");
			if (str.equals("2")) {
				NodeList listScore = element.getElementsByTagName("score");
				Element getScore = (Element) listScore.item(0);
				getScore.setTextContent("60分");
			}
		}
	}
	public void add() {
		Element name = doc.createElement("name");
		name.setTextContent("黄志豪");
		Element course = doc.createElement("course");
		course.setTextContent("JAVA");
		Element score = doc.createElement("score");
		score.setTextContent("59分");
		Element student = doc.createElement("student");
		student.setAttribute("id", "3");
		student.appendChild(name);
		student.appendChild(course);
		student.appendChild(score);
		Element sorces = (Element) doc.getElementsByTagName("sorces").item(0);
		sorces.appendChild(student);
	}

}
4,使用DOM4J解析简答题1描述成绩信息的XML,输出成绩信息。
import java.util.Iterator;


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


public class DOM4JScore {
	public static void main(String[] args) {
		SAXReader reader = new SAXReader();
		Document doc = null;
		try {
			doc = reader.read("Scores.xml");
			Element root = doc.getRootElement();
			for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
				Element element = (Element) iterator.next();
				String score = element.elementText("score");
				System.out.println(score);
			}			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

某学校拟使用XML文件制定一个学生(含已毕业学生信息文档,该文档描述其学校内学生的管理信息。 1、 选用合适的编辑器,编写一个XML文件,应至少包括下述信息内容: 学生目录下应该包括: (1) 所有学生的共有信息:班级的名字、专业、类别等 (2) 学生 学生1 学生基本信息学生姓名、性别、学号、年龄) 入学信息(入学时间、辅导员名) 班级内学生生源信息( 生源1:(生源地名称、联系方式等信息) 生源2: 生源n: ) 毕业信息(毕业时间、毕业数量、辅导员名) 学生2 学生3 。。。。。 学生N (3)辅导员 辅导员1(辅导员姓名、联系 方式、职位、管理的班级名) 辅导员2 2、针对该XML文件,画出其相应的树状结构图。 3、针对所编写的XML文件,编写其相应的DTD文件,并使用解析器验证其有效性,对验证结果抓图。 4、针对所编写的XML文件,编写合适的XSL文件,将学生基本信息打印成表格,并用ie浏览器进行浏览并截图。 5、使用JAVA编程语言,对XML文件进行解析: 显示该xml文件的所有节点、属性的名字; 同时显示该xml文件所有标记的文本数据; 计算学生的入学平均年龄并进行输出。 要求:1)xml文件中应该包括文本内容、标记、属性、命名空间,混合标记等的内容 2)dtd文件应该有相应的结果抓图 3)xsl文件应用到规范中的常用技巧,例如模板调用、for-each、value-of、xsl标记等。 4)解析器结果应该有抓图。 5)形成的代码交老师验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值