一文XML简单入门
Posted 暴躁的程序猿啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文XML简单入门相关的知识,希望对你有一定的参考价值。
Xml
什么是xml?
xml是可扩展的标记性语言
xml的作用?
1.可以用来保存数据,而且这些数据具有自我 描述性
2.它还可以作为项目或者模块的配置文件 (spring框架的配置文件application.xml等)
3.还可以作为网络数据传输的数据格式(现在以JSON为主)
声明文档
我们先创建一个简单的xml文件,用来描述图书信息
<?xml version="1.0" encoding="utf-8" ?>
<!--以上内容就是xml文件的声明
version="1.0" 表示xml的版本
encoding="utf-8" 表示xml文件本身的编码-->
<books>
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>java入门</name> <!--name表示书名-->
<author>小二</author> <!--作者-->
<price>68.9</price> <!--价格-->
</book>
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>c语言入门</name> <!--name表示书名-->
<author>小三</author> <!--作者-->
<price>16.8</price> <!--价格-->
</book>
</books>
xml注释
html和xml注释一样 :<!-- 注释-->
元素 (标签)
什么是xml元素?
XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可以包含其他元素、文本,元素也可以拥有属性
例如:
<name>java入门</name>
这就是元素
xml命名规则:
- 名称可以包含字母、数字以及其他字符
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>java入门</name> <!--name表示书名-->
<author>小二</author> <!--作者-->
<price>68.9</price> <!--价格-->
</book>
2.名称不能以数字或者标点符号开始
错误示例:
<1book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>c语言入门</name> <!--name表示书名-->
<author>小三</author> <!--作者-->
<price>16.8</price> <!--价格-->
</1book>
3.名称不能包含空格
错误示例
<he llo></he llo>
xml属性
xml的属性标签和html的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性 每个属性必须使用引号引起来
规则和标签的书写一致
例:
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
</book>
语法规则
1.所有xml元素都必须有关闭标签(也就是闭合)
2.xml必须正确的嵌套
这就是不正确的嵌套
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
<author>小三
</book></author>
3.xml文档必须有根元素
根元素就是顶级元素 没有父标签的元素,叫顶级元素 。
根元素是没有父标签的顶级元素,而且是唯一一个才行
错误示例: 有两个books不可以
<?xml version="1.0" encoding="utf-8" ?>
<!--以上内容就是xml文件的声明
version="1.0" 表示xml的版本
encoding="utf-8" 表示xml文件本身的编码-->
<books>
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>java入门</name> <!--name表示书名-->
<author>小二</author> <!--作者-->
<price>68.9</price> <!--价格-->
</book>
</books>
<books>
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>c++语言入门</name> <!--name表示书名-->
<author>小四</author> <!--作者-->
<price>16.8</price> <!--价格-->
</book>
</books>
4.xml的属性值必须加引号
5.xml中的特殊字符需要转义使用
例:
<price><16.8</price>
需写成
<price><16.8</price> < 转成 < > 转成 >
文本区域(CDATA区)
CDATA语法可以告诉xml解析器,我CDATA中的文本内容只是纯文本,不需要xml语法解析
CDATA格式
<![CDATA[这里可以把你输入的字符原样显示,不会解析 xml]]>
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>c语言入门</name> <!--name表示书名-->
<author>小三</author> <!--作者-->
<price><16.8</price> <!--价格-->
<![CDATA[<<<衬衫的价格是]]>
</book>
xml解析技术
不管是html还是xml都是标记性文档,都可以使用w3c组织制定的dom技术来解析。
xml文档对象模型定义访问和操作xml文档的标准方法。
Dom将xml文档作为一个树形结构,而树叶被定义为节点
document对象表示的是整个文档(可以是html文档也可以是xml文档)
早期JDK为我们提供两种解析xml技术DOM和Sax(已经过时)
dom解析是W3C组织制定的
SUN公司在JDK5对dom解析技术进行了升级:SAX(Simple API for XML)
SAX解析是一行一行读取不会产生大量的Dom对象 在内存和性能上优于Dom解析
第三方的解析:
jdom在dom基础上做了封装
dom4j又对jdom做了封装
pull主要用在android手机开发
dom4j解析技术
属于第三方公司技术,使用需要到dom4j官网下载jar包。
简单使用:
引入dom4j 依赖
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
项目下创建xml文件
<?xml version="1.0" encoding="utf-8" ?>
<!--以上内容就是xml文件的声明
version="1.0" 表示xml的版本
encoding="utf-8" 表示xml文件本身的编码-->
<books>
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>java入门</name> <!--name表示书名-->
<author>小二</author> <!--作者-->
<price>68.9</price> <!--价格-->
</book>
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
<name>c语言入门</name> <!--name表示书名-->
<author>小三</author> <!--作者-->
<price><16.8</price> <!--价格-->
<![CDATA[<<<衬衫的价格是]]>
</book>
</books>
创建一个pojo类
/**
* @create: 2022/1/14
* @author: Tony Stark
*/
public class Book
private String sn;
private String name;
private BigDecimal price;
private String author;
public Book()
public Book(String sn, String name, BigDecimal price, String author)
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
public String getSn()
return sn;
public void setSn(String sn)
this.sn = sn;
public String getName()
return name;
public void setName(String name)
this.name = name;
public BigDecimal getPrice()
return price;
public void setPrice(BigDecimal price)
this.price = price;
public String getAuthor()
return author;
public void setAuthor(String author)
this.author = author;
@Override
public String toString()
return "Book" +
"sn='" + sn + '\\'' +
", name='" + name + '\\'' +
", price=" + price +
", author='" + author + '\\'' +
'';
测试方法
/**
* 读取books.xml文件生成Book类
*/
@Test
public void test2()
Document read=null;
Element rootElement=null;
//1.读取books.xml文件
SAXReader reader = new SAXReader();
try
read = reader.read("books.xml");
//2.通过Document对象获取根元素
rootElement = read.getRootElement();
catch (DocumentException e)
e.printStackTrace();
//3.通过根元素获取book标签对象
//如果有多个就用elements 一个就用element
List<Element> books = rootElement.elements("book");
//4.遍历,处理每个book便签转换为book类
for (Element book : books)
//asXML 把标签对象转换成标签字符串
// System.out.println(book.asXML());
Element name = book.element("name");
Element price = book.element("price");
Element author = book.element("author");
//getText可以获取标签中的文本
String nameText = name.getText();
String priceText = price.getText();
String authorText = author.getText();
//获取标签的属性值
String sn = book.attributeValue("sn");
System.out.println(new Book(sn,nameText,new BigDecimal(priceText),authorText));
输出
Booksn='SN123123', name='java入门', price=68.9, author='小二'
Booksn='SN123123', name='c语言入门', price=16.8, author='小三'
以上是关于一文XML简单入门的主要内容,如果未能解决你的问题,请参考以下文章