用Java语言遍历读取和操纵XML文档

实验环境:jdk1.9 

实验工具:eclipse

问题:

   Students.xml


<学生名单>
  <学生>
    <学号>201501110101
    <姓名 爱好="足球">张三
    <性别>男
    <专业>软件工程
    <数学>85
    <英语>90
  
  <学生>
    <学号>201501110102
    <姓名 爱好="篮球">李四
    <性别>女
    <专业>软件工程
    <数学>92
    <英语>75
  
  <学生>
    <学号>201501110103
    <姓名>王五
    <性别>男
    <专业>软件工程
    <数学>79
    <英语>88
  
  <学生>
    <学号>201501110104
    <姓名  爱好="音乐">赵六
    <性别>男
    <专业>软件工程
    <数学>79
    <英语>88
  
  <学生>
    <学号>201501110105
    <姓名>刘七
    <性别>女
    <专业>软件工程
    <数学>90
    <英语>74
  
  <学生>
    <学号>201501110106
    <姓名 爱好="上网">张君宝
    <性别>男
    <专业>软件工程
    <数学>91
    <英语>67
  
  <学生>
    <学号>201501110107
    <姓名>崔春晓
    <性别>女
    <专业>软件工程
    <数学>70
    <英语>83
  
  <学生>
    <学号>201501110108
    <姓名>倪冰
    <性别>女
    <专业>软件工程
    <数学>91
    <英语>76
  
 <学生>
    <学号>201501110109
    <姓名>杨惠
    <性别>女
    <专业>软件工程
    <数学>78
    <英语>90
  
  <学生>
  <学号>201501110110
    <姓名 爱好="音乐">李中华
    <性别>男
    <专业>软件工程
    <数学>98
    <英语>79
  
  <学生>
  <学号>201501110201
    <姓名>张越
    <性别>男
    <专业>网络工程
    <数学>85
    <英语>97
  
  <学生>
  <学号>201501110202
    <姓名>秦水天
    <性别>男
    <专业>网络工程
    <数学>52
    <英语>76
  
  <学生>
  <学号>201501110203
    <姓名>张名扬
    <性别>男
    <专业>网络工程
    <数学>50
    <英语>69
  
  <学生>
  <学号>201501110204
    <姓名>张楚越
    <性别>男
    <专业>网络工程
    <数学>82
    <英语>77
  
  <学生>
  <学号>201501110205
    <姓名  爱好="上网">林子默
    <性别>女
    <专业>网络工程
    <数学>95
    <英语>86
  
  <学生>
    <学号>201501110206
    <姓名  爱好="看电视">李子涵
    <性别>女
    <专业>网络工程
    <数学>77
    <英语>88
  

问题:

  对于前面实验中所用的XML文档“Students.xml”,利用Java语言JAXP编程实现下面功能:

9-1.全部显示:显示XML文档“Students.xml”中的所有学生信息;

9-2.显示姓名:仅显示XML文档“Students.xml”中的所有学生的姓名;

9-3.显示属性:仅显示XML文档“Students.xml”中有爱好的学生的姓名及爱好;

9-4.查询学生:依据学号查找XML文档“Students.xml”中的学生信息并显示,若找不到给予提示。

9-5.添加学生:依据给定的学生信息添加新的学生,成功添加后给予提示。要注意新添加学生的学号不能与已有学生的学号相同,出现此种情况时给予提示。

9-6.删除学生:依据给定的学生学号删除指定学生,成功删除后给予提示。若找不到所给学号的学生,给予提示“该学生不存在,无法删除”。

9-7.更新学生:“Students.xml”文档中每位学生信息的最后面增加“平均”元素信息,其内容是该学生的“数学”与“英语”成绩的平均分。

 

注:

用eclipse新建java程序。把Students.xml文件放到本地的workSpace中,只有这样,才能在当前路径下解析xml文件。

Experiment9_1ShowAll.java

package com.xml.psd;

import java.io.File;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Experiment9_1ShowAll {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			String content=root.getTextContent();
			System.out.println(content);
		}catch(Exception e){
			System.out.println(e);
			}
	}

}

Experiment9_2ShowAllName.java

package com.xml.psd;

import java.io.File;

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

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

public class Experiment9_2ShowAllName {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			NodeList namesList=doc.getElementsByTagName("姓名");
			int length=namesList.getLength();
			//System.out.println(length);
			for(int i=0;i

Experiment9_3ShowNameAndHobby.java

package com.xml.psd;

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

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

public class Experiment9_3ShowNameAndHobby {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			NodeList namesList=doc.getElementsByTagName("姓名");
			int length=namesList.getLength();
			for(int i=0;i

Experiment9_4QueryByID.java

package com.xml.psd;

import java.util.ArrayList;
import java.util.Scanner;

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

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

public class Experiment9_4QueryByID {
	public static void main(String[] args) {
		System.out.println("请输入这个同学的学号:");
		Scanner scanner = new Scanner(System.in);
		String s = scanner.nextLine();
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			/*NodeList namesList=doc.getElementsByTagName("姓名");
			int length=namesList.getLength();
			for(int i=0;i list = new ArrayList();
			for(int i = 0;i list = new ArrayList();
						
						if(list.contains("201501110107")) {
							System.out.println("1");
						}else {
							System.out.println("0");
						}*/
			}
			//System.out.println(list);
			if(list.contains(s)) {
				System.out.println();
			}else {
				System.out.println("没有次学号的同学!!");
			}
			
		}catch(Exception e){
			System.out.println(e);
		}
	}
}

Experiment9_5appendStudent.java

package com.xml.psd;

import java.io.File;
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;

public class Experiment9_5appendStudent {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			/*String content=root.getTextContent();
			System.out.println(content);*/
			Element student=doc.createElement("学生");
			Element studentid=doc.createElement("学号");
			studentid.appendChild(doc.createTextNode("201511010318"));
			student.appendChild(studentid);
			Element studentName=doc.createElement("姓名");
			studentName.appendChild(doc.createTextNode("潘圣东"));
			student.appendChild(studentName);
			Element sex=doc.createElement("性别");
			sex.appendChild(doc.createTextNode("男"));
			student.appendChild(sex);
			Element studentSpc=doc.createElement("专业");
			studentSpc.appendChild(doc.createTextNode("未定专业"));
			student.appendChild(studentSpc);
			Element englishScore=doc.createElement("英语");
			englishScore.appendChild(doc.createTextNode("600"));
			student.appendChild(englishScore);
			Element mathScore=doc.createElement("数学");
			mathScore.appendChild(doc.createTextNode("150"));
			student.appendChild(mathScore);
			root.appendChild(student);
			
			TransformerFactory transFactory=TransformerFactory.newInstance();
			Transformer transformer=transFactory.newTransformer();
			transformer.setOutputProperty(OutputKeys.INDENT,"yes");
			DOMSource domSource=new DOMSource(doc);
			File file=new File("NewStudents.xml");
			FileOutputStream fos=new FileOutputStream(file);
			StreamResult xmlResult=new StreamResult(fos);
			transformer.transform(domSource,xmlResult);
			String content=root.getTextContent();
			System.out.println(content);
			System.out.println("插入新元素成功!");
			
			
		}catch(Exception e){
			System.out.println(e);
		}
	}
}

Experiment9_6RemoveByID.java

package com.xml.psd;

import java.util.ArrayList;
import java.util.Scanner;

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

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

public class Experiment9_6RemoveByID {
	public static void main(String[] args) {
		System.out.println("请输入这个同学的学号:");
		Scanner scanner = new Scanner(System.in);
		String s = scanner.nextLine();
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
			NodeList numberList = doc.getElementsByTagName("学号");
			int length = numberList.getLength();
			String content = null;
			String content2=null;
			String content3 = null;
			boolean has = false;
			ArrayList list = new ArrayList();
			for(int i = 0;i

Experiment9_7updateAverageGrade1.java

package com.xml.psd;

import java.io.File;
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 Experiment9_7updateAverageGrade1 {
	public static void main(String[] args) {
		try{
			DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			DocumentBuilder db= dbf.newDocumentBuilder();
			Document doc= db.parse("Students.xml");
			
			Element root=doc.getDocumentElement();
			String rootName=root.getNodeName();
			System.out.println("-----潘圣东-----");
			System.out.println(" 根元素名称是:"+rootName);
//			Element  averageGrade=doc.createElement("平均分");
			NodeList studentsList=doc.getElementsByTagName("学生");
			NodeList mathList = doc.getElementsByTagName("数学");
			NodeList EnglishList = doc.getElementsByTagName("英语");
			int length = studentsList.getLength();
//			System.out.println(length);
			for(int i=0;i

程序结果如图:

showAll.png

用Java语言遍历读取和操纵XML文档_第1张图片

showAllName.png

用Java语言遍历读取和操纵XML文档_第2张图片

showAllNameAndHobby.png

用Java语言遍历读取和操纵XML文档_第3张图片

showUpdateAverageGrade.png

用Java语言遍历读取和操纵XML文档_第4张图片


程序总结:

此次试验加深了对W3c.org.DOM的理解。掌握了java语言解析xml文件的相关的类。学会了用java程序创建节点和移除节点和查询节点等。

相关难点就是难以掌握节点的定位问题。通过getElementByTagName解决。再通过此节点的父亲节点或者是子节点来定位到所要寻找的节点。

所有的问题均可通过getElementByTagName问题定位,进而解决。

你可能感兴趣的:(xml)