学习笔记—XML
XML
XML简介
XML指可扩展标记语言(EXtensible Markup Language),是一种标记语言。
XML是一种灵活的语言,标签没有被预定义,需要自行定义标签。
通常,XML被用于信息的记录和传递,而非显示数据。XML被设计为具有自我描述性。
XML经常被用于充当配置文件。
XML语法
声明信息,它定义XML的版本(1.0)和所使用的编码(一般为UTF-8)
<?xml version="1.0" encoding="UTF-8"?>
xml有且仅有一个根元素
xml是大小写敏感的
标签是成对的,必须正确嵌套
xml的属性值必须加引号
注释的写法
<!-- 这里是注释 -->
XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
形式良好的xml实例
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里是注释 -->
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
DTD
DTD简介
DTD(Document Type Definition文档类型定义)
DTD用与约束xml的文档格式。可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD可被成行地声明于XML文档中(内部DTD),也可作为一个外部引用(外部DTD)。
使用DTD
内部DTD的定义
<!DOCTYPE 根元素 [元素声明]>
元素声明语法
<!ELEMENT 元素名 (子元素[, 子元素 ...])>
数量词
- + :表示出现 1 次或多次,至少一次。
- ?:表示出现 0 次或 1 次
- * :表示出现任意次
属性声明语法
- 属性类型:CDATA,表示字符数据(character data)
- 默认值:
- #REQUIRED 表示必须出现
- #IMPLIED 表示不是必须的
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
合法的xml实例
<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
<!ELEMENT books (book*) >
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>
外部DTD定义
创建一个独立的DTD文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book*) >
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
在xml中引入外部DTD文件
<!DOCTYPE 根元素 SYSTEM "文件名">
实例
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE book SYSTEM "book.dtd">
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>
XSD(XML Schema Definition)
XML Schema 是DTD 的替代者
XSD 不仅可以定义XML文档的结构,还可以规范文档的内容
XSD 本身也是XML文档
XSD 采用XML文档来定义语义约束,比DTD要复杂一些,但是功能强大。
- 支持丰富的数据结构
- 允许开发者自定义数据类型
- 可读性强
- 可针对未来需求进行扩展
XML的解析
对xml文件进行操作,包括创建 xml,对 xml 文件进行增删改查操作
常见的xml解析技术
DOM解析
XML DOM(XML Document Object Model),即XML文档对象模型。
是官方提供的解析方式,基于xml树解析。
XML文档对象模型定义访问和操作XML文档的标准方法。
SAX解析
是民间的解析方式,基于事件的解析。
消耗资源小,适用于数据量较大的XML。
JDOM解析
第三方提供,开源免费。
比DOM更快,使用具体类而不使用接口。
DOM4J
第三方提供,开源免费。
是JDOM的升级版。
DOM4J解析XML
借助DOM4J解析读取XML文件内容。
/**
* 借助DOM4J解析读取XML文件内容
*
* @author shangyang
* @throws Exception
*/
public static void readerXML() throws Exception { // 创建SAXReader对象,用于读取xml
SAXReader reader = new SAXReader();
// 读取xml文件,得到Document对象
Document doc = reader.read(new File("src/book.xml"));
// 获取根元素
Element root = doc.getRootElement();
// 获取根元素下所有子元素
Iterator<Element> it = root.elementIterator();
while (it.hasNext()) {
// 取出元素
Element e = it.next();
// 获取id属性
Attribute id = e.attribute("id");
System.out.println(e.getName() + id.getValue());
// 获取子元素
Element name = e.element("name");
Element author = e.element("author");
Element price = e.element("price"); System.out.println(name.getName() + " = " + name.getStringValue());
System.out.println(author.getName() + " = " + author.getStringValue());
System.out.println(price.getName() + " = " + price.getText());
System.out.println("--------------");
}
}

通过DOM4J解析生成xml文件
/**
* 通过DOM4J解析生成xml文件
* @author shangyang
* @throws Exception
*/
public static void writerXML() throws Exception {
// 1、通过DocumentHelper生成一个Document对象
Document doc = DocumentHelper.createDocument();
// 2、添加并得到根元素
Element root = doc.addElement("sources");
// 3、为根元素添加子元素
Element student = root.addElement("student");
// 4、为student元素添加属性
student.addAttribute("id", "1614010101");
// 5、为student添加子元素
Element name = student.addElement("name");
Element course = student.addElement("course");
Element results = student.addElement("results");
// 6、为子元素添加文本
name.addText("张三");
course.addText("数据结构");
results.addText("67");
// 7、将doc输出到xml文件中
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/sources.xml")), format);
writer.write(doc);
writer.close();
}

学习笔记—XML的更多相关文章
- html学习笔记-XML
html学习笔记-XML Table of Contents 1. XML简介 2. XML用途 3. XML树结构 4. XML语法 5. XML元素 6. XML属性 7. XML验证 8. XM ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- .net学习笔记---xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...
- Java学习笔记XML(3)
XML简介 XML即可扩展的标记语言.因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定. 目前为止所有的标记的语言都属于开源的语言.由W3C组织进行一个基本的维护. 因此大家学习这些 ...
- JavaWeb学习笔记——XML解析
DOM解析操作 只在跟节点<addresslist>下面建立一个子节点<name> <?xml version="1.0" encoding=&quo ...
- Android学习笔记——xml
转自http://blog.csdn.net/sam_zhang1984 解析 XML 有两种方式: SAX 和 DOM .它们各有利弊. DOM 是把 XML 文档全部装载到内存中,然后当成一树进行 ...
- .net学习笔记---xml操作及读写
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
- Python学习笔记--XML的应用
XML的定义 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被 ...
- Java学习笔记--xml构造与解析之Sax的使用
汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...
随机推荐
- Bug的严重等级和优先级别与分类
一. Bug的严重等级定义: 1. Blocker 即系统无法执行.崩溃或严重资源不足.应用模块无法启动或异常退出.无法测试.造成系统不稳定. 严重花屏 内存泄漏 用户数据丢失或破坏 系统崩溃/死机/ ...
- ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...
- Java核心技术梳理-基础类库
一.引言 Oracle为Java提供了丰富的基础类库,Java 8 提供了4000多个基础类库,熟练掌握这些基础类库可以提高我们的开发效率,当然,记住所有的API是不可能也没必要的,我们可以通过API ...
- 关于JVM的垃圾回收(GC) 这可能是你想了解的
目录 1 JVM中Java对象的分类 2 JVM的GC类型及触发条件 2.1 Young GC 2.2 Full GC 3 Java对象生成时的内存申请过程 3 Oracle JDK中的垃圾收集器 3 ...
- 从mysql中拿到的数据构造为列表
最近测试接口遇到一个问题,用python2.7从mysql中取到的数据是元祖类型的,元祖内部的元素也是一个元祖(并且部分元素的编码格式是unicode的): 类似这样: ((10144, u''), ...
- .netcore2.1 使用postgresql数据库,不能实现表的CRUD问题
PostgreSQL对表名.字段名都是区分大小写的.为了兼容其他的数据库程序代码的编写,推荐使用小写加_的方式,例如:swagger_info 我们使用.netcore连接postgresql数据库时 ...
- c/c++ 动态库与静态库的制作和使用
静态库的用法 静态库的文件名 libxxx.a -->对应windows的.lib文件 做静态库的命令: ar rcs libxxx.a file1.o file2.o file.o 使用静态库 ...
- windows本地安全策略实验-远程桌面连接锁定账户
windows本地安全策略实验-远程桌面连接锁定账户 实验环境: 服务端:Win7-1:10.10.10.136,开启远程桌面服务 客户端:win7-2:10.10.10.153 确保客户端和服务端能 ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
- CAP 2.4版本发布,支持版本隔离特性
前言 自从上次 CAP 2.3 版本发布 以来,已经过去了几个月的时间,这几个月比较忙,所以也没有怎么写博客,趁着2019年到来之际(现在应该是2019年开始的时候),CAP也发布了2018年的最后一 ...