JavaWeb基础入门—XML

版权声明:. https://blog.csdn.net/WildestDeram/article/details/86773060

XML入门

  1. XML的介绍和用途
  2. XML的文档结构
  3. JAVA解析XML
  4. XPath路径表达式

XML的介绍和用途

XML全称为EXtensible Markup Language,可扩展标记语言

编写XML就是编写标签,和HTML类型,扩展名.xml

优点:良好的人机可读性

<employee>
    <name>Jack</name>
    <age>28</age>
    <height>178</height>
</employee>

XML与HTML的比较

  1. XML与HTML都是编写标签
  2. XML没有预定义标签,而HTML有
  3. XML重在保存和传输数据,而HMTL重在显示

XML用途

  1. 1.Java程序的配置文件:在实际开发中,不可能把程序的一些配置参数写进程序中,不然后期维护要从程序中修改。如果写进XML中,则可以大大提升维护性。
  2. 2.用于保存程序产生的数据
  3. 3.网络间的数据传输

 

XML的文档结构

XML文档结构(必备要素)

  • 第一行必须是XML声明
  • 只有一个根节点
  • 标签抒写规则和HTML相同

XML声明是说明XML文档的基本信息,版本号与字符集

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- 
        version:版本号 1.0/1.1
        encoding:设置字符集
        只有设置为UTF-8才支持中文
    -->

Java解析XML

解析文件hr.xml,参考上文

利用dom4j来遍历XML,dom4j能把XML内容解析成"树"状形式保存在内存中

HrReader.java

package com.dom4j.javaee;

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;

/**
 * 	读取XML的实现类
 * @author Jun
 *
 */
public class HrReader {
	
	//读取XML的方法
	public void readXML() {
		// 获得XML的地址
		String file = "C:\\Users\\Jun\\Desktop\\JavaWeb\\xml pro\\xml\\src\\hr.xml";
		//	SAXReader类是读取XML的核心类,用于将XML解析hou以"树"状的形式保存在内存中
		SAXReader reader = new SAXReader();
		//	用read()把XML解析成一个Document对象,try catch
		try {
			Document document = reader.read(file);
			// getRootElement()获取XML的根节点,即hr,返回对象Element	
//XML中所有的标签都是通过Element对象包装
			Element root = document.getRootElement();
			List<Element> employee = root.elements("employee");	//	elements方法用于返回指定的标签集合x
			for(Element e : employee) {
				Element name = e.element("name");	//用于获取唯一的子节点
				String empName = name.getText();	//获得标签内容
				System.out.println(empName);
				System.out.println(e.elementText("age"));	//获取子节点内容
				System.out.println(e.elementText("salary"));
				
				Element department = e.element("department");
				System.out.println(department.elementText("dname"));
				System.out.println(department.elementText("address"));
				
				Attribute att = e.attribute("no");	//获取属性
				System.out.println(att.getText());
				System.out.println();
			}
		} catch (DocumentException e) {		//如果XML有语法异常,就会抛出异常
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		HrReader hr = new HrReader();
		hr.readXML();
	}
}

利用Dom4j来更新XML

package com.dom4j.javaee;

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 HrWrite {
	public void writeXml() {
		// 获得XML的地址
		String file = "C:\\Users\\Jun\\Desktop\\JavaWeb\\xml pro\\xml\\src\\hr.xml";
		SAXReader reader = new SAXReader();		//创建SAXReader对象,用于解析XML
		try {
			Document document = reader.read(file);
			Element hr = document.getRootElement();		//获取根节点
			Element employee = hr.addElement("employee");		//创建hr对象下的子节点
			employee.addAttribute("no", "A003");		//创建属性
			
			employee.addElement("name").setText("Tony");	//为标签写入值
			employee.addElement("age").setText("27");
			employee.addElement("salary").setText("3600");
			
			Element department = employee.addElement("department");
			department.addElement("dname").setText("电工");
			department.addElement("address").setText("电力部");
			
			//将Tony信息写入到XML中,(目前只是在内存中)
			
			//把文件输出流转换成Writer对象  UTF-8防止乱码
			Writer writer = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");		
			document.write(writer);
			writer.close();   //关闭流
		} catch (Exception e) {		
			//写入操作的时候,要把异常升级
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		HrWrite hr = new HrWrite();
		hr.writeXml();
	}
}

运行后,回到XML文档中"ctrl+shift+F"对排版进行自动整理。

XPath路径表达式

XPath路径表达式是XML文档中查找数据的语言

XPath编写需要的条件:Jaxen包

链接:https://pan.baidu.com/s/1CA2GV6alBPCxx0QhxETRNA 
提取码:romm 

hr.xml

<?xml version="1.0" encoding="UTF-8"?>
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="hr.xsd">
	<employee no="S001">
		<name>测试一号 </name>
		<age>23</age>
		<salary>3000</salary>
		<department>
			<dname>CT</dname>
			<address>B-1</address>
		</department>
	</employee>
	<employee no="S002">
		<name>测试2号</name>
		<age>21</age>
		<salary>3050</salary>
		<department>
			<dname>T</dname>
			<address>A-2</address>
		</department>
	</employee>
	<employee no="S003">
		<name>测试3号</name>
		<age>22</age>
		<salary>3100</salary>
		<department>
			<dname>CT</dname>
			<address>B-2</address>
		</department>
	</employee>
	<employee no="S004">
		<name>测试4号</name>
		<age>23</age>
		<salary>3150</salary>
		<department>
			<dname>CT</dname>
			<address>C-2</address>
		</department>
	</employee>
	<employee no="S005">
		<name>测试5号</name>
		<age>24</age>
		<salary>3200</salary>
		<department>
			<dname>T</dname>
			<address>B-2</address>
		</department>
	</employee>
	<employee no="S006">
		<name>测试6号</name>
		<age>25</age>
		<salary>3250</salary>
		<department>
			<dname>CT</dname>
			<address>A-2</address>
		</department>
	</employee>
	<employee no="S007">
		<name>测试7号</name>
		<age>28</age>
		<salary>3300</salary>
		<department>
			<dname>T</dname>
			<address>C-2</address>
		</department>
	</employee>
	<employee no="S008">
		<name>测试8号</name>
		<age>29</age>
		<salary>3350</salary>
		<department>
			<dname>T</dname>
			<address>B-2</address>
		</department>
	</employee>
	<employee no="S009">
		<name>测试9号</name>
		<age>30</age>
		<salary>3400</salary>
		<department>
			<dname>CT</dname>
			<address>A-2</address>
		</department>
	</employee>
	<employee no="S010">
		<name>测试10号</name>
		<age>31</age>
		<salary>3450</salary>
		<department>
			<dname>CT</dname>
			<address>B-2</address>
		</department>
	</employee>
</hr>

XPathTestor.java

package com.dom4j.javaee3;

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 url = "C:\\Users\\Jun\\Desktop\\JavaWeb\\xml pro\\xml\\src\\com\\dom4j\\javaee3\\hr.xml";
		
		
		SAXReader reader = new SAXReader();		//创建SAXReader对象
		try {
			Document document = reader.read(url);	//读取文件
			//执行XPath表达式的核心方法,返回List<Node> Node是Element和Attribute的父类
			List<Node> nodes = document.selectNodes(xpathExp);	
			
			//for遍历
			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 xp = new XPathTestor();
		xp.xpath("/hr/employee");		//	从根节点hr下获取employee节点,按照顺序获取
		xp.xpath("//employee");			// 	只要有employee节点,直接获取
		xp.xpath("//employee[salary<=3200]"); 	// 	工资小于3200的员工信息
		xp.xpath("//employee[name='测试3号']");	//	获取测试3号的信息
		xp.xpath("//employee[@no='S001']"); 		//	通过属性来获取员工信息	如果是integer就不需要''
		
		
		//以下按照位置来筛选
		xp.xpath("//employee[1]");
		
		//获取最后一个员工信息
		xp.xpath("//employee[last()]");
		
		//前5名员工的信息	position()表示当前位置
		xp.xpath("//employee[position()<=5]");	
		
		//提取具体位置
		xp.xpath("//employee[3] | //employee[5]");
	}
}

猜你喜欢

转载自blog.csdn.net/WildestDeram/article/details/86773060
今日推荐