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

XML的重点知识

一文详细讲解JAVA开发中的XML_第1张图片

文章目录

  • XML的重点知识
    • 1. XML介绍与用途
      • 1.1 XML是什么
        • XML与HTML的比较
      • 1.2 XML的用途
    • 2. XML的文档结构
    • 3.XML标签书写规则
    • 4.XML语义约束
      • 创建`DTD`文件
      • 创建`XML Schema`文件
    • 5.Java解析XML
      • Dom4j
    • 6.XPath路径表达式
      • Xpath实验室

1. XML介绍与用途

1.1 XML是什么

  • XML的全称是EXtensible Markup Language , 可扩展标记语言
  • 编写XML就是编写标签,与HTML非常类似,扩展.xml
  • 良好的人机可读性
    一文详细讲解JAVA开发中的XML_第2张图片
XML与HTML的比较
  • XML与HTML非常相似,都是编写标签
  • XML没有预定义标签,HTML存在大量预定义标签
  • XML重在保存与传输数据,HTML用于显示信息
    一文详细讲解JAVA开发中的XML_第3张图片

1.2 XML的用途

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

2. XML的文档结构

  • 第一行必须是XML声明(包括版本号和字符集)
    
    
  • 有且只有一个根节点
  • 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>

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

3.XML标签书写规则

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

4.XML语义约束

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

DTD(Document Type Definition,文档类型定义)是一种简单易用的语义约束方式。扩展名为.dtd
一文详细讲解JAVA开发中的XML_第4张图片

创建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)>

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>

5.Java解析XML

DOM(Document Object Model) 定义了访问和操作XML文档的标准方法,DOMXML文档作为树结构来查看,能够通过DOM树来读写所有的元素。
一文详细讲解JAVA开发中的XML_第5张图片

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();
	}
	
}

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();
	}
}

6.XPath路径表达式

一文详细讲解JAVA开发中的XML_第6张图片

  • 表达式案例:
    一文详细讲解JAVA开发中的XML_第7张图片
  • 谓语表达式:
    一文详细讲解JAVA开发中的XML_第8张图片

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]");
		
	}
}

你可能感兴趣的:(java学习笔记,java,xml,前端)