XML

XML用途

  • XML指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具
  • XML应用于web开发的许多方面,常用于简化数据的存储和共享
  • XML简化数据共享
  • XML简化数据传输
  • XML简化平台的变更

XML处理指令

  • XML处理指令,简称PI(processing instruction)
    处理指令用来指挥解析引擎如何解析XML文档内容
    • <?xml version="1.0" encoding="UTF-8"?>
    • 在XML中,所有处理指令都以<?开头,?>结束。

元素和属性

  • XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可以包含其他元素、文本或者两者的混合物。元素也拥有属性.例如:
    <web-app xmlns=“http://xmlns.jcp.org/xml/ns/javaee
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd
    version=“3.1”></web-app>

  • XML必须有且只能有一个根元素,所谓根元素就是不被其它元素包围(就是在最外层的元素且不能有与它平级的元素)。

  • XML 元素必须遵循以下命名规则:
    名称可以含字母、数字以及其他的字符;
    名称不能以数字或者标点符号开始;
    名称不能以字符 “xml”(或者 XML、Xml)开始;
    名称不能包含空格;
    可使用任何名称,没有保留的字词。

  • 元素的开始标签和结束标签必须一致

  • XML对大小写敏感

  • 元素必须有关闭标签

    • <a></a>
    • <a/>自关闭标签等同于无内容空元素
  • 实体引用:实体可以是常用的短语,键盘字符,文件,数据库记录或任何包含数据的项。在XML中,有时实体内包含特殊字符,如<>"’&等,这些均需要对其进行转义,

    在这里插入图片描述

  • 属性提供关于元素的而外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的应用程序来说却很重要。

  • XML属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用

  • 如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用
    如:
    <a id = “a’b’c”></a>
    <a id = ‘a"b"c’></a>

使用DOM4J解析XML的步骤:

1.创建SAXReader
2. 使用SAXReader读取XML文档,并声称Document对象
3. 通过Doucument对象获取根元素
4. 从根元素开始逐级获取子元素已达到遍历XML文档数据的目的

  • Document提供了获取根元素的方法:
    Element getRootElement()
    Element 的每个实例用于表示XML文档中的一个元素(一对标签)
    其提供了获取标签相关信息的一组方法:
    - String getName()获取标签的名字
    - String getText()获取标签文本(开始与结束标签中间的文本)
    - String elementText(String name);获取指定子标签的文本
    - Element element(String name)获取当前标签下指定名字的子标签
    - List elements()获取当前标签下所有的子标签
    - List elements(String name)获取当前标签下所有相同名字标签(指定的名字)

写出XML文档

大致步骤:

  1. 创建Doucument对象表示一个空白文档
  2. 向Doucment对象中添加根元素
    Document提供的方法:Element addElement(String name)向当前文档中添加给定名字的根元素,并以Element实例形式将其返回,以便继续对根元素追加操作

注意: Document的这个方法只能调用一次,因为一个文档只能有一个根元素

  1. 从根元素开始逐级添加子元素以形成XML文档的树结构
  2. 创建XmlWriter
  3. 通过XmlWriter将Document写出以生成XML文档

案例1:将xml中的员工信息读取

	public static void main(String[] args) {
		/*
		 * 使用DOM4J解析XML的步骤:
		 * 1.创建SAXReader
		 * 2. 使用SAXReader读取XML文档,并生成Document对象
		 * 3. 通过Doucument对象获取根元素
		 * 4. 从根元素开始逐级获取子元素已达到遍历XML文档数据的目的
		 */
		/*
		 * 将emplist.xml文档中的所有员工信息读取
		 */
		List<Emp> emplist = new ArrayList<>();
		try {
			SAXReader reader = new SAXReader();
			Document doc = reader.read(new File("./emplist.xml"));
			/*
			 * Document提供了获取根元素的方法:
			 * Element getRootElement()
			 * Element 的每个实例用于表示XML文档中的一个元素(一对标签)
			 * 其提供了获取标签相关信息的一组方法:
			 * - String getName()获取标签的名字
		- String getText()获取标签文本(开始与结束标签中间的文本)
		- Element element(String name)获取当前标签下指定名字的子标签
		- List elements()获取当前标签下所有的子标签
		- List elements(String name)获取当前标签下所有相同名字标签(指定的名字)		
			 */
			Element root = doc.getRootElement();//获取了最外层的标签<list><>
		//	String name = root.getName();
		//	System.out.println(name);
			List<Element> list  = root.elements();//获取的还是<emp><>标签的集合
			System.out.println(list.size());
			//System.err.println(root.element("name"));
			/*
			 * 遍历每个emp标签,用于获取该员工信息
			 * 
			 */
			for(Element emp:list) {//emp还是一个标签,内部有id名字属性和三个子标签
				Element nameEle = emp.element("name");
				String name = nameEle.getTextTrim();
				int age =Integer.parseInt( emp.element("age").getText());
				
				double salary = Double.parseDouble(emp.elementText("salary"));
				String gender =	emp.element("gender").getText();
//				Element a = emp.getParent();
//				System.out.println(a.getName());
				Attribute attr = emp.attribute("id");
				int id = Integer.parseInt(attr.getValue());
				id= Integer.parseInt(emp.attributeValue("id"));
				emplist.add(new Emp(id,age,name,salary,gender));
				System.out.println(id+" "+name+" "+gender+" "+age+" "+salary);
			
			}
			System.out.println("解析完毕。打印emplist:");
			for(Emp emp1:emplist) {
				System.out.println(emp1);
			}
				
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

案例2:将一组员工信息写出到xml文件

	public static void main(String[] args) {
		List<Emp> emplist = new ArrayList<>();
		emplist.add(new Emp(1, 23, "张三", 3000, "男"));//Emp员工类,id,age,name,salary,gender
		emplist.add(new Emp(2, 23, "张三", 3000, "男"));
		emplist.add(new Emp(3, 23, "张三", 3000, "男"));
		emplist.add(new Emp(4, 23, "张三", 3000, "男"));
		emplist.add(new Emp(5, 23, "张三", 3000, "男"));

		// 1
		Document doc = DocumentHelper.createDocument();
		// 2
		/*
		 * Document提供的方法:Element addElement(String
		 * name)向当前文档中添加给定名字的根元素,并以Element实例形式将其返回,以便继续对根元素追加操作
		 * 
		 * >注意: Document的这个方法只能调用一次,因为一个文档只能有一个根元素
		 * 
		 */
		Element root = doc.addElement("list");
		for (Emp emp : emplist) {
			Element empEle = root.addElement("emp");
			Element nameE = empEle.addElement("name");
			Element ageE = empEle.addElement("age");
			Element genderE = empEle.addElement("gender");
			Element salaryE = empEle.addElement("salary");
			nameE.addText(emp.getName());
			ageE.addText(Integer.valueOf(emp.getAge()).toString());
			genderE.addText(emp.getGender());
			salaryE.addText(Double.valueOf(emp.getSalary()).toString());
			empEle.addAttribute("id", Integer.valueOf(emp.getId()).toString());

		}
//		try (FileOutputStream fos = new FileOutputStream("emplist1.xml");
//				OutputStreamWriter osw = new OutputStreamWriter(fos);) {
//			doc.write(osw);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		XMLWriter writer = null;
		try {
			writer = new XMLWriter(new FileOutputStream("emplist2.xml"),OutputFormat.createPrettyPrint());
			writer.write(doc);;
		} catch (Exception e) {
		}finally {
			if(writer!=null) {
				try {
					writer.close();
				} catch (Exception e2) {
				}
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值