XML基础

一、XML的概述(了解)

     * eXtensible Markup Language 可扩展标记语言

     * 宗旨是传输数据,而非显示数据。

     * XML标签没有被预定义,需要用户自行定义标签。

     * XML技术是W3C组织(WorldWideWeConsortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。

     * 作用: a. 传输数据

              b. 配置文件(主要用途)

二、XML的语法(掌握)

     * <?xml version=“1.0”?> 文档声明必须出现在第一句

     * 一个标签有如下两种书写形式:

        包含标签主体:<mytag>some content</mytag>

        不含标签主体:<mytag/>

     * 一个XML文档必须有且仅有一个根标签

     * XML中不会忽略主体内容中出现的空格和换行。

     * 严格区分大小写

     * <!--这是注释-->

     * CDATA : 把标签当做普通文本内容;

         <![CDATA[

            <itcast>www.itcast.cn</itcast>

         ]]>

三、XML的约束(看懂即可,掌握引入外部约束文件的语句)

    * DTD

        *分类:

            格式良好的XML:遵循XML语法的XML

            有效的XML:遵循约束文档的XML

           约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。

         注意:dtd文档必须用utf-8编码格式保存

        * 校验XML的有效性

             * 非校验解析器

             * 校验解析器

        * DTD 文件的引入:

            当引用的DTD文档在本地时,采用如下方式:<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>

            当引用的DTD文档在公共网络上时,采用如下方式:

                    <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>

                    eg : <!DOCTYPE web-app PUBLIC

                            "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

                            "http://java.sun.com/dtd/web-app_2_3.dtd">

        * DTD文件的语法

            在DTD文档中使用ELEMENT关键字来声明一个XML元素。

            如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档

            如果子元素用“|”分开,说明任选其一

            用+、*、?来表示元素出现的次数

            定义属性:

                 <!ATTLIST 元素名

                    属性名1 属性值类型 设置说明

                    属性名2 属性值类型 设置说明>

    * Schema(难)

四、XML的解析(掌握)

    * 解析的方式

        * DOM 解析(Java解析) : 利用DOM树来解析

        * SAX 解析 :       边加载边解析.

        * 解析包

            * JAXP (sun 公司提供)

            * DOM4j (第三方)

         * 单元测试

            * 搭建环境: 在工程中引入junit包

                * 测试方法:

                    1. 测试方法必须是公有的

                    2. 测试方法必须返回值是void

                    3. 测试方法必须加@Test

                    4. 测试方法没有形参

                @Test : 代表测试方法

                    参数timeout: 指定执行方法所需最多时间(毫秒)

                    expected: 指定方法会出现的异常类型(用元类表示)

                @Before : 执行每个测试方法之前都要执行的方法

                @After  : 执行每个测试方法之后都要执行的方法

     * Dom4j解析(掌握)

        * document的方法:

                    elements() : 拿到节点的所有子节点

                    elements(String) : 拿到指定名字的所有的子节点

                    element(String) : 拿到指定名字的子节点

        * Element节点的方法:

                    setText() : 设置标签节点的内容

                    getTest() : 获得标签节点的内容

                    addAttibute(String name ,String value ) : 添加标签的属性

                    removeAttribute(String name) : 删除某个属性

        * XPath: 主要作用是获取某个节点的路径 。

五、Schema(掌握如何引入一个schema文件)

    * 名称空间 : 指的是一个环境,所用的标签来自于哪个环境定义的。

    * 掌握引用schema文件:

            xml中引入schema约束的步骤:

                1、查看schema文档,找到根元素,在xml中写出来

                            <?xml version="1.0" encoding="UTF-8"?>

                            <书架>

                            </书架>

                2、根元素来自哪个名称空间。使用xmlns指令来声明

                        名称空间是在schema中定义的,就是targetNamespace的值

                        <?xml version="1.0" encoding="UTF-8"?>

                        <itcast:书架 xmlns:itcast="http://www.itcast.com/book">

                        </itcast:书架>

                3、引入的名称空间根哪个xsd文件对应?

                使用schemaLocation来指定:两个取值:第一个为名称空间 第二个为xsd文件的路径

                <?xml version="1.0" encoding="UTF-8"?>

                <itcast:书架 xmlns:itcast="http://www.itcast.com/book"

                    schemaLocation="http://www.itcast.com/book book.xsd">

                </itcast:书架>

                4、schemaLocation哪里来的?它来自一个标准的名称空间,直接复制黏贴即可.

                    <?xml version="1.0" encoding="UTF-8"?>

                        <itcast:书架 xmlns:itcast="http://www.itcast.com/book"

                                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                                    xsi:schemaLocation="http://www.itcast.com/book book.xsd">

                    </itcast:书架>

                5、只要以上4部搞好了,对于子标签myeclipse就有提示了

使用dom4j解析xml(xml的增删改查)

1.解析的xml文件

  1: <?xml version="1.0" encoding="UTF-8"?>
  2: 
  3: <exam> 
  4:   <student examid="222" idcard="2222"> 
  5:     <name>cs002</name>  
  6:     <location>hn</location>  
  7:     <grade>98.0</grade> 
  8:   </student>  
  9:   <student examid="111" idcard="1111">
 10:     <name>cs001</name>
 11:     <location>bj</location>
 12:     <grade>90.0</grade>
 13:   </student>
 14: </exam>
 15: 

2.实现的功能:

输入字母a添加用户;输入b按照身份证查找用户;输入c按照身份证删除用户。

该功能主要分为4层,分别为bean,util,dao,view。

bean部分:

该部分实现对数据的基本访问和操作。

  1: package net.csing;
  2: 
  3: public class Student {
  4: 	private String name;
  5: 	private String idcard;
  6: 	private String examid;
  7: 	private String location;
  8: 	private float grade;
  9: 	
 10: 	public String getName() {
 11: 		return name;
 12: 	}
 13: 	public void setName(String name) {
 14: 		this.name = name;
 15: 	}
 16: 	public String getIdcard() {
 17: 		return idcard;
 18: 	}
 19: 	public void setIdcard(String idcard) {
 20: 		this.idcard = idcard;
 21: 	}
 22: 	public String getExamid() {
 23: 		return examid;
 24: 	}
 25: 	public void setExamid(String examid) {
 26: 		this.examid = examid;
 27: 	}
 28: 	public String getLocation() {
 29: 		return location;
 30: 	}
 31: 	public void setLocation(String location) {
 32: 		this.location = location;
 33: 	}
 34: 	public float getGrade() {
 35: 		return grade;
 36: 	}
 37: 	public void setGrade(float grade) {
 38: 		this.grade = grade;
 39: 	}
 40: 	@Override
 41: 	public String toString() {
 42: 		return "Student [name=" + name + ", idcard=" + idcard + ", examid="
 43: 				+ examid + ", location=" + location + ", grade=" + grade + "]";
 44: 	}
 45: 	
 46: }
 47: 

util部分:

该部分实现对xml文档的获取和反写;

  1: package net.csing;
  2: 
  3: import java.io.FileOutputStream;
  4: 
  5: import org.dom4j.Document;
  6: import org.dom4j.DocumentException;
  7: import org.dom4j.io.OutputFormat;
  8: import org.dom4j.io.SAXReader;
  9: import org.dom4j.io.XMLWriter;
 10: 
 11: public class StudentUtil {
 12: 	public Document getDocument(){
 13: 		SAXReader reader=new SAXReader();
 14: 		try {
 15: 			Document document=reader.read("src/exam.xml");
 16: 			return document;
 17: 		} catch (DocumentException e) {
 18: 			e.printStackTrace();
 19: 		}
 20: 		return null;
 21: 	}
 22: 	public void write2XML(Document document){
 23: 		try{
 24: 			XMLWriter writer=new XMLWriter(new FileOutputStream("src/exam.xml"),OutputFormat.createPrettyPrint());
 25: 			writer.write(document);
 26: 			writer.close();
 27: 		}
 28: 		catch(Exception e){
 29: 			e.printStackTrace();
 30: 		}
 31: 	}
 32: }
 33: 

dao部分:

该部分实现对功能的逻辑操作,主要包括增加,删除,查找。

  1: package net.csing;
  2: 
  3: import org.dom4j.Document;
  4: import org.dom4j.Element;
  5: import org.dom4j.Node;
  6: 
  7: public class StudentDao {
  8: 	StudentUtil sd=new StudentUtil();
  9: 	public Document document=sd.getDocument();
 10: 	
 11: 	public void addStudent(Student student){
 12: 		Element root=document.getRootElement();
 13: 		Element newStudent=root.addElement("student");
 14: 		newStudent.addAttribute("examid", student.getExamid())
 15: 					.addAttribute("idcard", student.getIdcard());
 16: 		newStudent.addElement("name").setText(student.getName());
 17: 		newStudent.addElement("location").setText(student.getLocation());
 18: 		newStudent.addElement("grade").setText(student.getGrade()+"");
 19: 		StudentUtil su=new StudentUtil();
 20: 		su.write2XML(document);
 21: 	}
 22: 	public Student findStudent(String id){
 23: 		Node node=document.selectSingleNode("/exam/student[@idcard="+id+"]");
 24: 		Student student;
 25: 		if(node!=null){
 26: 			student=new Student();
 27: 			student.setExamid(node.valueOf("@examid"));
 28: 			student.setIdcard(node.valueOf("@idcard"));
 29: 			student.setName(((Element)node).element("name").getText());
 30: 			student.setLocation(((Element)node).element("location").getText());
 31: 			student.setGrade(Float.parseFloat(((Element)node).element("grade").getText()));
 32: 			return student;
 33: 		}
 34: 		
 35: 		return null;
 36: 	}
 37: 	public void deleteStudent(String id){
 38: 		Node node=document.selectSingleNode("/exam/student[@idcard="+id+"]");
 39: 		Element element=(Element)node;
 40: 		Element root = document.getRootElement();
 41: 		root.remove(element);
 42: 		StudentUtil su=new StudentUtil();
 43: 		su.write2XML(document);
 44: 		
 45: 	}
 46: }
 47: 

view部分:

展现给用户操作的选项。

  1: package net.csing;
  2: 
  3: import java.util.Scanner;
  4: 
  5: public class StudentView {
  6: 	public static void main(String[] args){
  7: 		Scanner scan=new Scanner(System.in);
  8: 		System.out.println("添加用户请输入a;");
  9: 		System.out.println("查找用户请输入b;");
 10: 		System.out.println("删除用户请输入c;");
 11: 		String ch=scan.next();
 12: 		if(ch.equals("a")){
 13: 			addUser();
 14: 		}else if(ch.equals("b")){
 15: 			findUser();
 16: 		}else if(ch.equals("c")){
 17: 			deleteUser();
 18: 		}
 19: 	}
 20: 	private static void deleteUser() {
 21: 		System.out.println("请输入要删除的用户的身份证号:");
 22: 		Scanner scan=new Scanner(System.in);
 23: 		String id=scan.next();
 24: 		StudentDao sd=new StudentDao();
 25: 		sd.deleteStudent(id);
 26: 	}
 27: 	private static void findUser() {
 28: 		System.out.println("请输入要查找的用户的身份证号:");
 29: 		Scanner scan=new Scanner(System.in);
 30: 		String id=scan.next();
 31: 		StudentDao sd=new StudentDao();
 32: 		Student stu=sd.findStudent(id);
 33: 		System.out.println(stu);
 34: 	}
 35: 	public static void addUser(){
 36: 		Scanner scan=new Scanner(System.in);
 37: 		System.out.println("请输入学生姓名:");
 38: 		String name=scan.next();
 39: 		
 40: 		System.out.println("请输入学生准考证号:");
 41: 		String examid=scan.next();
 42: 		
 43: 		System.out.println("请输入学生身份证号:");
 44: 		String idcard=scan.next();
 45: 		
 46: 		System.out.println("请输入学生地址:");
 47: 		String location=scan.next();
 48: 		
 49: 		System.out.println("请输入学生得分:");
 50: 		String grade=scan.next();
 51: 		
 52: 		Student stu=new Student();
 53: 		stu.setName(name);
 54: 		stu.setExamid(examid);
 55: 		stu.setIdcard(idcard);
 56: 		stu.setLocation(location);
 57: 		stu.setGrade(Float.parseFloat(grade));
 58: 		StudentDao sd=new StudentDao();
 59: 		sd.addStudent(stu);
 60: 	}
 62: }
 63: 

代码写的有点臃肿,仍有改善的地方。

xml增加数据

xml更新数据

以上操作用到了两个jar包。

dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值