实验环境:jdk1.9

实验工具:eclipse

问题:

Students.xml

<?xml version="1.0" encoding="GB2312"?>
<学生名单><学生><学号>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<length;i++){Node node=namesList.item(i);String content=node.getTextContent();System.out.print(node.getNodeName());System.out.println(":"+content);}}catch(Exception e){System.out.println(e);}}
}

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<length;i++){Node node=namesList.item(i);Element elementNode=(Element)node; // 将节点转换为元素节点String name=node.getTextContent();// 获得节点的文本内容String content=elementNode.getAttribute("爱好");// 获得元素节点的属性if(content!=""){System.out.print(name);System.out.println(":"+content);}}}catch(Exception e){System.out.println(e);}}
}

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<length;i++){Node node=namesList.item(i);Element elementNode=(Element)node; // 将节点转换为元素节点String name=node.getTextContent();// 获得节点的文本内容String content=elementNode.getAttribute("爱好");// 获得元素节点的属性if(content!=""){System.out.print(name);System.out.println(":"+content);}}*/NodeList numberList = doc.getElementsByTagName("学号");int length = numberList.getLength();String content = null;String content2=null;boolean has = false;ArrayList<String> list = new ArrayList<String>();for(int i = 0;i<length;i++) {Node node=numberList.item(i);content=node.getTextContent();content2 = numberList.item(i).getParentNode().getTextContent();list.add(content);//System.out.println(list);//System.out.println(content);if(content.equals(s)==false) {continue;}else {System.out.println("有这个同学,这个同学的信息是:");System.out.println(content2);break;}/*if(content.equals(s)==false) {has = false;}else {has = true;System.out.println("有这个同学的信息,信息是:"+content2);}*//*ArrayList<String> list = new ArrayList<String>();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<String> list = new ArrayList<String>();for(int i = 0;i<length;i++) {Node node=numberList.item(i);content=node.getTextContent();content2 = numberList.item(i).getParentNode().getTextContent();list.add(content);if(content.equals(s)==false) {continue;}else {//System.out.println("有这个同学,这个同学的信息是:");root.removeChild(numberList.item(i).getParentNode());break;}}String content4=root.getTextContent();System.out.println(content4);if(list.contains(s)) {System.out.println("已删除学号为"+s+"的同学!");}else {System.out.println("没有此学号的同学!!");}}catch(Exception e){System.out.println(e);}}
}

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<length;i++) {Node mathNode = mathList.item(i);double mathGrade =Double.parseDouble(mathNode.getTextContent());Node EnglishNode = EnglishList.item(i);double EnglishGrade = Double.parseDouble(EnglishNode.getTextContent());String s = (mathGrade+EnglishGrade)/2+"";//System.out.println(s);Element  averageGrade=doc.createElement("平均分");averageGrade.appendChild(doc.createTextNode(s));Node node = studentsList.item(i);node.appendChild(averageGrade);}String content=root.getTextContent();System.out.println(content);TransformerFactory transFactory=TransformerFactory.newInstance();Transformer transformer=transFactory.newTransformer();transformer.setOutputProperty(OutputKeys.INDENT,"yes");// 添加换行符 添加换行符DOMSource domSource=new DOMSource(doc);File file=new File("studentsNew2.xml");FileOutputStream out=new FileOutputStream(file);StreamResult xmlResult=new StreamResult(out);transformer.transform(domSource,xmlResult);System.out.println("成功");}catch(Exception e){System.out.println(e);}}
}

程序结果如图:

showAll.png

showAllName.png

showAllNameAndHobby.png

showUpdateAverageGrade.png

程序总结:

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

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

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

用Java语言遍历读取和操纵XML文档相关推荐

  1. C#读取与修改XML文档

    在项目开发中,对XML文档的操作是很常用的,这里,简单的说明读取与修改XML文档 XML文档的格式 <?xml version="1.0" encoding="ut ...

  2. C#中XmlDocument读取和创建 XML 文档

    系列文章目录 C#处理XML 数据的技术方法总结 XmlDocument读取和创建 XML 文档 XmlWriter类提供一种快速非缓存的只进 XML 数据生成方式 XmlReader类提供一种快速非 ...

  3. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...

  4. Unity 读取和修改XML文档

    1.Unity 读取XML文档 (1) 创建一个无继承实体类Class01,一个纯C#无继承的实体类Class02. (2) Class01根据XML文档中的内容设置具体的字段,并且设置get/set ...

  5. Java 添加、读取、删除PPT文档属性

    文档属性是一些描述性的信息,它未包含在文件的实际内容中,提供有关文件的信息,可用来帮助查找和整理文件.以下示例中将介绍通过Java程序来添加PPT文档属性.读取.删除PPT文档中已有属性的方法. 使用 ...

  6. java opc连接测试,java连接opc读取数据实例及文档

    [实例简介] 在已有java web工程里添加读取opc的接口类.附有详细说明操作步骤. [实例截图] [核心代码] f9c60785-5c7a-42c8-a6ff-67244cf5c251 ├── ...

  7. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  8. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  9. python批量生成,用python批量生成简单的xml文档

    最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...

最新文章

  1. 海思移植opencv+车辆检测
  2. C# 类中继承接口的属性
  3. xml python gb2312_使用Python处理XML格式数据的方法介绍
  4. Java web之web.xml配置详解
  5. Vue.js 基础学习
  6. 年末阿里百度等大厂技术面试题汇总,完整版开放下载
  7. 【小工具】根据定义的白名单字段进行Bean的拷贝
  8. python response重头开始_用 Python 抓取公号文章保存成 PDF
  9. Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
  10. cacti升级后还是用的旧路径_Flutter1.9升级体验及填坑全攻略
  11. vue 萤石云视频监控对接
  12. WinForm界面控件Telerik UI for WinForm入门指南教程
  13. Arduino 结构语法详解(含示例)二
  14. Compilation failure: Compilation failure
  15. 庆祝livid公布Bible的源代码,鼓掌~~
  16. python纳甲装卦
  17. 901虎年期待和变元的哥德尔数配置——哥德尔原著英译本拆解汉译之五
  18. c++ LintCode刷题记录之52. 下一个排列
  19. css 全屏显示一张图片_css 如何让图片全屏的问题
  20. 百度知道到底是哪个国家的公司

热门文章

  1. DRBD中文应用指南
  2. 考研复习:有关连续的定理、间断点及其分类
  3. 20@nginx优化
  4. WLAN无线局域网IEEE802.11协议一
  5. python中a* b是什么意思_python的 a,b=b,a+b 和 a=b b=a+b 的区别
  6. 推荐一位好友,是他让我破了戒!
  7. 银雀山汉简出土引发全球“孙子出版热”
  8. 设置环境变量永久生效和临时生效 export PS1
  9. 【设计模式】共享模式
  10. 【Bug修复】VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences