1、XML 简介
什么是xml?
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
xml 的作用?
XML 被设计用来传输和存储数据。
2、XML 语法
- 文档声明。
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
注:
- 不同于html,所有XML 元素都须有关闭标签(也就是闭合)
- XML 标签大小写敏感
- XML 必须正确地嵌套
- XML 文档必须有唯一的根元素,也就是顶级元素
- XML 的属性值须加引号
- XML 中的特殊字符的表示方法与html一样
2.1文档声明
创建一个 xml 文件
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
属性
- version 是版本号
- encoding 是 xml 的文件编码
- standalone=“yes/no” 表示这个 xml 文件是否是独立的 xml 文
2.2 元素(标签)
2.2.1 什么是 XML 元素?
XML 元素 指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。xml元素类似html标签
<bookstore><bookcategory="CHILDREN"><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><bookcategory="WEB"><title>Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book></bookstore>
在上例中, 和 都拥有元素内容,因为它们包含了其他元素。 只有文本内容,因为它仅包含文本。
在上例中,只有 元素拥有属性 (category=“CHILDREN”)。
2.2.2 XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始- 名称不能包含空格
可使用任何名称,没有保留的字词。
2.3 xml 属性
XML 元素可以在开始标签中包含属性,类似 HTML。
属性 (Attribute) 提供关于元素的额外信息。
属性值必须被引号包围
<!-- sex 是一个属性 --><personsex="female"><firstname>Anna</firstname><lastname>Smith</lastname></person><!-- sex 是一个子元素 --><person><sex>female</sex><firstname>Anna</firstname><lastname>Smith</lastname></person>
在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。
2.4 xml 注释
html 和 XML 注释 一样 :
<!-- 注释 -->
2.5 文本区域(CDATA 区)
CDATA 里的文本内容,只是纯文本,不会被xml语法解析
CDATA 格式:
<![CDATA[纯文本原样显示]]]>
例:
<!-- xml 声明 version 是版本的意思 encoding 是编码 --><BOOK><![CDATA[纯文本原样显示]]]></BOOK>
3、XML解析技术—dom4j★
3.1 下载【dom4j】jar包
下载之后,创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。【dom4j 】jar 包就导入完成了
3.2 dom4j 编程步骤
- 先加载 xml 文件创建 Document 对象
- 通过 Document 对象拿到根元素对象
- 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
- 找到你想要修改、删除的子元素,进行相应操作
【student.xml】
<!-- xml 声明 version 是版本的意思 encoding 是编码 --><students><studentsn="2020020197"><!-- sn属性为学号--><name>冯诺依曼</name><!-- name标签为姓名--><age>20</age><!-- age标签为年龄--></student><studentsn="2020020198"><!-- sn属性为学号--><name>图灵</name><!-- name标签为姓名--><age>22</age><!-- age标签为年龄--></student></students>
【Student.java】
publicclassStudent { privateStringsn; privateStringname; privateintage; publicStudent(Stringsn, Stringname, intage) { this.sn=sn; this.name=name; this.age=age; } publicStudent() { } publicStringtoString() { return"Student{"+"sn='"+sn+'\''+", name='"+name+'\''+", age="+age+'}'; } publicStringgetSn() { returnsn; } publicvoidsetSn(Stringsn) { this.sn=sn; } publicStringgetName() { returnname; } publicvoidsetName(Stringname) { this.name=name; } publicintgetAge() { returnage; } publicvoidsetAge(intage) { this.age=age; } }
解析XML文件
publicvoidgetDocument() throwsDocumentException { // 1.通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象SAXReaderreader=newSAXReader(); Documentdocument=reader.read("src/student.xml"); // 2.通过 Document 对象。拿到 XML 的根元素对象Elementroot=document.getRootElement(); // 3.通过根元素对象。获取所有的 book 标签对象List<Element>students=root.elements("student"); // 4.遍历每个 student 标签对象。然后获取到 student 标签对象内的每一个元素for (Elementstudent : students) { //elementText("name") 获取name标签的文本内容StringnameText=student.elementText("name"); //elementText("age") 获取age标签的文本内容StringageText=student.elementText("age"); //attributeValue() 获取sn属性的文本内容StringsnValue=student.attributeValue("sn"); //实例化javabean类接收System.out.println(newStudent(snValue, nameText, Integer.parseInt(ageText))); } }