java xml的使用

作用

1.可以用来保存一些数据(注:保存一些小数据还行,太大还是使用数据库)

2.可以用来做配置文件(java框架中很常见,所以掌握java需要对xml一些了解)

3.数据传输载体(比如在微信二次开发的时候他给你传输的格式就是xml的)

需要达到的目标

一般开发的人员需要达到:会解析xml,会写xml!了解dtd约束和Schema约束

定义

头部顶行的定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
version 表示该xml的版本

encoding 表示该xml的编码

standalone 表示该xml是否是一个独立的文档 是否有关联其他文档

一般使用第二种 写出xml的版本 和编码方式

注意:这个头部文件是必须写而且是要在第一行不然就是错误的xml文件 切记第一行 注释也算一行的 所以第一行注释也不能写 必须写头文件

###元素定义

其实xml的元素定义和html很像一样都是

<name>lcc</name>  这是平常的定义方式
<age/>     这是空标签

xml的元素必须包含在一个根元素中

就是必须由一个大的元素包含

<?xml version="1.0" encoding="UTF-8" ?>
<datas>
	<data>
		<name>lcc</name>
		<age>23</age>
	</data>
	<data>
		<name>ll</name>
		<age>22</age>
	</data>
</datas>

这就是一个简单xml文件

他包含的头文件顶行写,所有元素由一个根元素包含

元素命名规则

名称可以含字母、数字以及其他的字符 
名称不能以数字或者标点符号开始 
名称不能以字符 “xml”(或者 XML、Xml)开始 
名称不能包含空格 
(命名尽量简单,做到见名知义)

属性的定义

<?xml version="1.0" encoding="UTF-8" ?>
<datas>
	<data id="aa">
		<name>lcc</name>
		<age>23</age>
	</data>
	<data id="bb">
		<name>ll</name>
		<age>22</age>
	</data>
</datas>

属性的定义相对元素的定义比较宽松可以任意定义

<元素名称 属性名称=“属性的值”></元素名称>

注释

注释与html的注释相同

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 我是注释 -->
<datas>
	<data id="aa">
		<name>lcc</name>
		<age>23</age>
	</data>
	<data id="bb">
		<name>ll</name>
		<age>22</age>
	</data>
</datas>

使用 的格式

CDATA

非法字符

与html相似 如果遇到 < & 需要转义才能使用

&lt; < 小于号
&gt; > 大于号
&amp; & 和
&apos ; ’ 单引号
&quot; " 双引号

####CDATA会试xml解析器不去解析里面的内容原格式输出

<aa><![CDATA[<a href="http://www.baidu.com">百度</a>]]></a>

java XML的解析

针对xml的解析java有两种类型一种是

DOM:将整个XML文档读到内存中形成一个DOM,如果XML太大就会造成内存溢出,这种读取方式可以对文档进行增删查操作

SAX:读一行,解析一行 不能进行增删操作只能进行查询操作

从效率来讲DOM比较快

对于这些解析方式java的包有很多

jaxp、jdom、dom4j

dom4j的使用

  1. 创建SaxReader对象
  2. 指定解析的xml
  3. 获取根元素。
  4. 根据根元素获取子元素或者下面的子孙元素

导入

在这里插入图片描述

dom4j-1.6-1.jar的包

package xml;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class test {
	public static void main(String[] args) {
		try {
			// 1. 创建sax读取对象
			SAXReader reader = new SAXReader();
			// 2. 解析的xml的源
			Document document = reader.read(new File("src/test.xml"));
			// 3.得到根元素
			Element rootElement = document.getRootElement();
			// 4.根据根元素寻找子元素
			System.out.println(rootElement.element("data").elementText("name"));
			//5.遍历所有元素
			List<Element> list = rootElement.elements();
			for (Element element : list) {
				String name = element.elementText("name");
				String age = element.elementText("age");
				System.err.println("name:"+name+"   age:"+age);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

使用xpath解析

xpath是什么呢?

https://www.runoob.com/xpath/xpath-tutorial.html

XPath 是一门在 XML 文档中查找信息的语言

(在爬虫的时候也用的到 所以可以了解下)

使用xpath比平常的解析要多导入一个包
在这里插入图片描述

package xml;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class test {
	public static void main(String[] args) {
		try {
			// 1. 创建sax读取对象
			SAXReader reader = new SAXReader();
			// 2. 解析的xml的源
			Document document = reader.read(new File("src/test.xml"));
			// 3.得到根元素
			Element rootElement = document.getRootElement();
			// 4.根据根元素寻找子元素
			//   要想使用Xpath, 还得添加支持的jar 获取的是第一个 只返回一个。 
			System.out.println(rootElement.selectSingleNode("//name").getText());
			//5.遍历所有元素
			List<Element> list = rootElement.selectNodes("//name");
			for (Element element : list) {
				System.err.println("name:"+element.getText());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

如果不导入jaxen-1.1-beta-6.jar

就会报如下错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
	at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
	at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
	at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
	at xml.test.main(test.java:21)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 4 more

约束

约束是指约束XML的格式

一般有:Schema和DTD需要使用的时候可以了解下 一般知道这个事情就好了,除非真正需要制定XML格式规范的时候需要使用 使用的时候查下就好了

Schema:http://www.runoob.com/schema/schema-tutorial.html

DTD:http://www.runoob.com/dtd/dtd-tutorial.html

猜你喜欢

转载自blog.csdn.net/qq_37770116/article/details/84025250
今日推荐