什么是xml文件格式
- 我们要给对方传输一段数据,数据内容是“too young,too simple,sometimes naive”,要将这段话按照属性拆分为三个数据的话,就是,年龄too young,阅历too simple,结果sometimes naive。我们都知道程序不像人,可以体会字面意思,并自动拆分出数据,因此,我们需要帮助程序做拆分,因此出现了各种各样的数据格式以及拆分方式。比如,可以是这样的数据为“too young,too simple,sometimes naive”然后按照逗号拆分,第一部分为年龄,第二部分为阅历,第三部分为结果。也可以是这样的数据为“too_young* too_simple*sometimes_naive”从数据开头开始截取前面十一个字符,去掉号并把下划线替换为空格作为第一部分,再截取接下来的十一个字符同样去掉并替换下划线为空格作为第二部分,最后把剩下的字符同样去号体会空格作为第三部分。这两种方式都可以用来容纳数据并能够被解析,但是不直观,通用性也不好,而且如果出现超过限定字数的字符串就容纳不了,也可能出现数据本身就下划线字符导致需要做转义。基于这种情况,出现了xml这种数据格式, 上面的数据用XML表示的话可以是这样
<person age="too young" experience="too simple" result="sometimes naive" />
也可以是这样
<person>
<age value="too young" />
<experience value="too simple" />
<result value="sometimes naive" />
</person>
两种方式都是xml,都很直观,附带了对数据的说明,并且具备通用的格式规范可以让程序做解析。如果用json格式来表示的话,就是下面这样
{
"age":"too young",
"experience":"too simple",
"result":"sometimes naive"
}
看出来没,其实数据都是一样的,不同的只是数据的格式而已,同样的数据,我用xml格式传给你,你用xml格式解析出三个数据,用json格式传给你,你就用json格式解析出三个数据,还可以我本地保存的是xml格式的数据,我自己先解析出三个数据,然后构造成json格式传给你,你解析json格式,获得三个数据,再自己构造成xml格式保存起来,说白了,不管是xml还是json,都只是包装数据的不同格式而已,重要的是其中含有的数据,而不是包装的格式。
XML文件创建格式
- 例:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<part id = "01" name="选项一">
<name>我是徐茅山</name>
<age>今年20岁</age>
<sex>男</sex>
</part>
<part id="02" name="选项二">
<name>我是李逍遥</name>
<age>今年22岁</age>
<sex>男</sex>
</part>
</root>
xml文件的解析
- 这里只是简单的提一下关于xml文件的解析,我使用的是比较流行的dom4j解析,[dom4j的文件下载地址](“https://dom4j.github.io/“)
- 实例:
package com.xinsi.qi.utils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Dom4jXml {
public void test(){
try {
File inputFile = new File("F:\\J2EE学习资料\\demoLes03\\web\\WEB-INF\\test.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(inputFile);
System.out.println("Root element :"+document.getRootElement().getName());
Element classElement = document.getRootElement();
List<Node> nodes = document.selectNodes("/class/part[@id='02']");
System.out.println("--------------------");
for (Node node:nodes){
System.out.println("标签名=:"+node.getName());
System.out.println("姓名:"+node.selectSingleNode("name").getText());
System.out.println("年龄:"+node.selectSingleNode("age").getText());
System.out.println("性别:"+node.selectSingleNode("sex").getText());
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
- 首先创建一个xml文件,这里使用的xml文件就是上面的xml例子,使用dom4j,先创建文件,将文件引入。
File inputFile = new File("F:\\J2EE学习资料\\demoLes03\\web\\WEB-INF\\test.xml");
- 再创建dom4j的读取文件类,来读取xml文件
SAXReader reader = new SAXReader();
- Document是获取根元素类,控制台输出时,如下
System.out.println("Root element :"+document.getRootElement().getName());
输出Root element :root,该文件的根元素名称为root
- Element类是获取根元素内的元素
- List nodes = document.selectNodes(“/class/part[@id=’02’]”) 这段代码的意思是,定位到该元素属性的位置,使用该方法还需要下载,jaxen.jar包,jaxen的下载地址
- @id=’02’的意思是定位到id为02的元素属性,以遍历的形式输出出来。
for (Node node:nodes){
System.out.println("标签名=:"+node.getName());
System.out.println("姓名:"+node.selectSingleNode("name").getText());
System.out.println("年龄:"+node.selectSingleNode("age").getText());
System.out.println("性别:"+node.selectSingleNode("sex").getText());
}
- 最终控制台的输出结果为:
标签名=:part
姓名:我是李逍遥
年龄:今年22岁
性别:男