JAVA中XML讲解(应用案例)
【摘要】
文章目录
一.XML文件的概述(1)什么是XML(2)XML 与 HTML 的主要差异(3)XML语法(4)XML 命名规则(5)XML作用(6)XML基本结构
二.XML解析(1)解析方式...
一.XML文件的概述
(1)什么是XML
XML 指可扩展标记语言 所谓的可扩展标记语言,简单说就是指xml文件中的标签可以任意
定义。
XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
(2)XML 与 HTML 的主要差异
- XML 不是 HTML 的替代。
- XML 和 HTML 为不同的目的而设计:
- XML 被设计为传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
- HTML 旨在显示信息,而 XML 旨在传输信息。
(3)XML语法
- XML 标签对大小写敏感
- XML 元素都须有关闭标签
- XML 文档必须有根元素
- XML 的属性值须加引号
(4)XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
(5)XML作用
- XML用来在程序间
传输数据
- XML可用来
存储数据
(框架的配置信息)
(6)XML基本结构
文档版本声明及编码
<?xml version="1.0" encoding="UTF‐8"?>
- 1
- 树形结构:所有标签必须包含在一对根标签中
- 整个文档是一个document对象
- 节点
- ①文档中的某个标签及其包含的内容称为一个节点(标签节点 element)
- ②标签的某个属性也是一个节点(属性节点 attribute)
- ③文档中的一个文本也是一个节点(文本节点 Text)
二.XML解析
(1)解析方式
所谓的xml解析就是对xml文件进行读写操作。
- Xml解析方式分为两种:
- ①dom方式(document object model)
- 即文档对象模型,它是w3c组织推荐的解析xml的一种方式。
- ②sax方式(simple api for xml)
- 不是官方标准,它是xml 社区事实上的标准,几乎所有的xml解析器都支持它
- dom与sax解析方式,它只一种理论,没有具体API.
- dom与sax解析方式区别
dom:
dom解析方式它是将整个xml文件载入内存,以树型结构来存储
dom支持回写 可以对xml文件中内容进行crud操作
如果文件内容比较大,不建议使用dom解析。
Sax
相比dom,sax是一种更为轻量级解决方案
采用串行读取方式,逐行读取,读取一行解析一行。
编程比较复杂
sax只能读取,不能对xml进行修改。
- 第三方xml解析包
- Jaxp(sun标准)
- Jdom:专注于写操作(Java对象–>XML文档)
- Dom4j:专注于读操作(XML文档–>Java对象)
<?xml version="1.0" encoding="UTF-8"?>
<dogs>
<dog id="1">
<name>旺财</name>
<type>哈士奇</type>
</dog>
<dog id="2">
<name>豆豆</name>
<type>中华田园犬</type>
</dog>
<dog id="3">
<name>花花</name>
<type>藏獒</type>
</dog>
</dogs>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 根据xml文件创建对应的类
public class Dog {
private int id;
private String name;
private String type;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Dog{" +
"id=" + id +
", name='" + name + '\'' +
", type='" + type + '\'' +
'}';
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
SAXReader Dom4J的读取文件的类
常用方法 | 解释 |
---|---|
Document | 文档类 用于加载指定的文档 |
getRootElement | 获取根节点 |
Element | 标签类,元素 |
elements | 获取所有的直接子标签 |
attribute | 获取指定属性名称的属性对象 |
elementText | 获取指定标签名称的文本内容 |
element | 获取指定标签名称的标签对象 |
- 代码实现xml解析
public class Dom4j_Case {
public static void main(String[] args) throws Exception {
//创建xml读取对象
SAXReader reader=new SAXReader();
//读取要解析的xml文件
Document document=reader.read(new FileInputStream("xml/dogs.xml"));
//获取根节点
Element root=document.getRootElement();
//获取所有的直接子标签
List<Element> elements = root.elements();
List<Dog> dogs=new ArrayList<>();
//遍历
for(Element element:elements) {
Dog dog=new Dog();
//获取指定属性名称的值
dog.setId(Integer.parseInt(element.attribute("id").getText()));
//获取指定元素的值
dog.setName(element.elementText("name"));
dog.setType(element.elementText("type"));
//添加到集合
dogs.add(dog);
}
//输出
System.out.println(dogs);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
(2)DOM4J相关类
SAXReader 此类用于加载XML文档
- 构造器:无参构造器
- 方法: public Document read( String/File…);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFileName);
- 1
- 2
Document接口
- 获取根元素: public Element getRootElement();
//通过Document对象调用getRootElement方法获取根元素
Element root = doc.getRootElement();
- 1
- 2
Element接口:表示xml文档中的某个元素
//1.获取当前元素的所有属性
List<Attribute> attrs = e.attributes();
//2.根据属性名获取属性值
String attrValue = e.attributeValue(String attrName);
//3.获取当前元素的所有子元素
List<Element> childElements = e.elements();
//4.获取当前元素下指定标签名的子元素
List<Element> childElements = e.elements(String tagName);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Attribute接口:表示xml文件中元素的属性
- attr.getName();
- attr.getValue();
List<Attribute> attrs = root.attributes();
for (int i = 0; i < attrs.size(); i++) {
Attribute attr = attrs.get(i);
//获取属性名
String attrName = attr.getName();
//获取属性值
String attrValue = attr.getValue();
System.out.println(attrName+"="+attrValue);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
The best investment is in yourself.
2020.03.20 来自辰兮的第33篇博客
文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。
原文链接:blessing.blog.csdn.net/article/details/104988868
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)