• 一文详细讲解JAVA开发中的XML


    XML的重点知识

    在这里插入图片描述

    1. XML介绍与用途

    1.1 XML是什么

    • XML的全称是EXtensible Markup Language , 可扩展标记语言
    • 编写XML就是编写标签,与HTML非常类似,扩展.xml
    • 良好的人机可读性
      在这里插入图片描述
    XML与HTML的比较
    • XML与HTML非常相似,都是编写标签
    • XML没有预定义标签,HTML存在大量预定义标签
    • XML重在保存与传输数据,HTML用于显示信息
      在这里插入图片描述

    1.2 XML的用途

    • Java程序的配置描述文件
    • 用于保存程序的产生的数据
    • 网络间的数据传输

    2. XML的文档结构

    • 第一行必须是XML声明(包括版本号和字符集)
      
      
      • 1
    • 有且只有一个根节点
    • XML标签的书写规则与HTML相同
    
    DOCTYPE hr SYSTEM "hr.dtd">
    
    <hr>
    	<employee no="3301">
    		<name>李铁柱name>
    		<age>37age>
    		<salary>3600salary>
    		<department>
    			<dname>人事部dname>
    			<address>XX大厦-B105address>
    		department>
    	employee>
    	<employee no="3302">
    		<name>林海name>
    		<age>50age>
    		<salary>7000salary>
    		<department>
    			<dname>财务部dname>
    			<address>XX大厦-B106address>
    		department>
    	employee>
    	<employee no="3310">
    		<name>李四name>
    		<age>23age>
    		<salary>3000salary>
    		<department>
    			<dname>工程部dname>
    			<address>XX大厦-B104address>
    		department>
    	employee>
    hr>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    可以使用浏览器打开检验是否存在语法问题

    3.XML标签书写规则

    • 合法的标签名
      标签要有意义,建议使用英文小写字母,不要存在重名的情况!
    • 适当的注释和缩进
    • 合理使用属性
    • 特殊字符与CDATA标签
    • 有序的子元素

    4.XML语义约束

    • XML文档结构正确,但可能不是有效的
    • XML语义约束有两种定义方式:DTDXML Schema

    DTD(Document Type Definition,文档类型定义)是一种简单易用的语义约束方式。扩展名为.dtd
    在这里插入图片描述

    创建DTD文件

    
    <!ELEMENT hr (employee+)>
    <!ELEMENT employee (name,age,salary,department)>
    <!ATTLIST employee no CDATA "">
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT salary (#PCDATA)>
    <!ELEMENT department (dname,address)>
    <!ELEMENT dname (#PCDATA)>
    <!ELEMENT address (#PCDATA)>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    PCDATA表示纯文本节点

    创建XML Schema文件

    • XML Schema比DTD更为复杂,提供了更多功能
    • XML Schema提供了数据类型,格式限定,数据范围等特性
    • XML Schema是W3C标准
    
    <schema xmlns="http://www.w3.org/2001/XMLSchema">
    	<element name="hr">
    		
    		<complexType>
    			<sequence>
    				<element name="employee" minOccurs="1" maxOccurs="9999">
    					<complexType>
    						<sequence>
    							<element name="name" type="string">element>
    							<element name="age">
    								<simpleType>
    									<restriction base="integer">
    										<minInclusive value="18">minInclusive>
    										<maxInclusive value="60">maxInclusive>
    									restriction>
    								simpleType>
    							element>
    							<element name="salary" type="integer">element>
    							<element name="department">
    								<complexType>
    									<sequence>
    										<element name="dname" type="string">element>
    										<element name="address" type="string">element>
    									sequence>
    								complexType>
    							element>
    						sequence>
    						<attribute name="no" type="string" use="required">attribute>					
    					complexType>
    				element>
    			sequence>
    		complexType>
    	element>	
    schema>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    5.Java解析XML

    DOM(Document Object Model) 定义了访问和操作XML文档的标准方法,DOMXML文档作为树结构来查看,能够通过DOM树来读写所有的元素。
    在这里插入图片描述

    Dom4j

    • Dom4j是一个易用的、开源的库,用于解析XML。 它应用于Java平台,具有性能优异、 功能强大和极其易使用的特点。
    • Dom4j将XML视为Document对象。
    • XML标签被Dom4j定义为Elementi对象。

    Dom4j下载地址
    Reader.java

    package com.imooc.dom4j;
    
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class HrReader {
    	public void readXml(){
    		String file = "d:/workspace/xml/src/hr.xml";
    		//SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中。
    		SAXReader reader = new SAXReader();
    		try {
    			Document document = reader.read(file);
    			//获取XML文档的根节点,即hr标签
    			Element root = document.getRootElement();
    			//elements方法用于获取指定的标签集合
    			List<Element> employees =  root.elements("employee");
    			for(Element employee : employees){
    				//element方法用于获取唯一的子节点对象
    				Element name = employee.element("name");
    				String empName = name.getText();//getText()方法用于获取标签文本
    				System.out.println(empName);
    				System.out.println(employee.elementText("age"));
    				System.out.println(employee.elementText("salary"));
    				Element department = employee.element("department");
    				System.out.println(department.element("dname").getText());
    				System.out.println(department.element("address").getText());
    				Attribute att = employee.attribute("no");
    				System.out.println(att.getText());
    			}
    		} catch (DocumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void main(String[] args) {
    		HrReader reader = new HrReader();
    		reader.readXml();
    	}
    	
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    Wirter.java

    package com.imooc.dom4j;
    
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class HrWriter {
    	public void writeXml(){
    		String file = "d:/workspace/xml/src/hr.xml";
    		SAXReader reader = new SAXReader();
    		try {
    			Document document = reader.read(file);
    			Element root = document.getRootElement();
    			Element employee = root.addElement("employee");
    			employee.addAttribute("no", "3311");
    			Element name = employee.addElement("name");
    			name.setText("李铁柱");
    			employee.addElement("age").setText("37");
    			employee.addElement("salary").setText("3600");
    			Element department = employee.addElement("department");
    			department.addElement("dname").setText("人事部");
    			department.addElement("address").setText("XX大厦-B105");
    			Writer writer = new OutputStreamWriter(new FileOutputStream(file) , "UTF-8");
    			document.write(writer);
    			writer.close();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void main(String[] args) {
    		HrWriter hrWriter = new HrWriter();
    		hrWriter.writeXml();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    6.XPath路径表达式

    最常用的就奔表达式

    • 表达式案例:
      在这里插入图片描述
    • 谓语表达式:
      在这里插入图片描述

    Xpath实验室

    • Jaxen介绍
      1. Jaxen是一个Java编写的开源的XPath库。这是适应多种不同的对象模型,包括DOM,XOM,dom4j和JDOM
      2. Dom4j底层依赖axen实现XPath查询
      3. Jaxen下载地址:jaxen.codehaus.org(maven.aliyun.com
    package com.imooc.dom4j;
    
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    
    public class XPathTestor {
    	public void xpath(String xpathExp){
    		String file = "E:/lianxi/xml/hr.xml";
    		SAXReader reader = new SAXReader();
    		try {
    			Document document = reader.read(file);
    			
    			List<Node> nodes = document.selectNodes(xpathExp);
    			for(Node node : nodes){
    				Element emp = (Element)node;
    				System.out.println(emp.attributeValue("no"));
    				System.out.println(emp.elementText("name"));
    				System.out.println(emp.elementText("age"));
    				System.out.println(emp.elementText("salary"));
    				System.out.println("==============================");
    			}
    			
    			
    		} catch (DocumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		XPathTestor testor = new XPathTestor();
    //		testor.xpath("/hr/employee");
    //		testor.xpath("//employee");
    //		testor.xpath("//employee[salary<4000]");
    //		testor.xpath("//employee[name='李铁柱']");
    //		testor.xpath("//employee[@no=3304]");
    //		testor.xpath("//employee[1]");
    //		testor.xpath("//employee[last()]");
    		//testor.xpath("//employee[position()<3]");
    		testor.xpath("//employee[3] | //employee[8]");
    		
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
  • 相关阅读:
    单点登录认识
    详解一下HTML的语义化标签
    prototype 原型对象
    Outlook邮箱IMAP怎么开启?服务器怎么填?
    二叉树的OJ练习题
    Python中的两种排序方法:sort()和sorted()
    5 Flink CDC同步
    Netty深入浅出Java网络编程学习笔记(二) Netty进阶应用篇
    laravel框架 - 辅助函数
    蓝桥杯 选择排序
  • 原文地址:https://blog.csdn.net/weixin_44105632/article/details/126805910