一:xml

1. xml简介

a) xml, eXtensible Markup Language, 可扩展标记语言.是一种标记语言.

b) xml 是一种非常灵活的语言, 没有固定的标签, 所有的标签都可以自定义.

c) 通常, xml 被用于信息的记录和传递. 因此, xml 经常被用于充当配置文件.

2. 格式良好的xml

a) 声明信息, 用于描述 xml 的版本和编码方式

<?xml version="1.0" encoding="UTF-8"?>

b) xml 有且仅有一个根元素

c) xml 是大小写敏感的

d) 标签是成对的, 而且要正确嵌套

e) 属性值要使用双引号

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里是注释 -->
<books>
<book id="b01">
<name>java高级编程</name>
<author>张三</author>
<price>50.5</price>
</book>
<book id="b02">
<name>java中级编程</name>
<author>李四</author>
<price>30.5</price>
</book>
</books>

二:DTD

1. DTD简介

a) DTD, Document Type Definition, 文档类型定义

b) DTD 用于约束 xml 的文档格式, 保证 xml 是一个有效的xml.

c) DTD 可以分为两种, 内部 DTD, 外部 DTD

2. 使用DTD
2.1 内部DTD的定义

a)语法如下:

<!DOCTYPE 根元素 [元素声明]>

b) 元素声明语法:

<!ELEMENT 元素名 (子元素[, 子元素...])>

c) 数量词

+:表示出现 1 次或多次, 至少一次

?:表示出现 0 次或 1 次

*:表示出现任意次

d) 属性声明语法:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型: CDATA, 表示字符数据(character data)
默认值:
#REQUIRED, 表示必须出现
#IMPLIED, 表示不是必须的

e) 带 DTD 的完整 xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE scores [
<!ELEMENT scores (student+)>
<!ELEMENT student (name, course, score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
]>
<scores>
<student id="1">
<name>王同</name>
<course>java</course>
<score>89</score>
</student>
<student id="2">
<name>李佳</name>
<course>sql</course>
<score>58</score>
</student>
</scores>
2.2 外部 DTD 的定义

a) 创建一个独立的 dtd 文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student+)>
<!ELEMENT student (name, course, score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>

b) 在 xml 中引入外部 DTD 文件

<!DOCTYPE 根元素 SYSTEM "文件名">
<!-- 引入外部DTD文件 -->
<!DOCTYPE scores SYSTEM "scores.dtd">

三:XML的解析

对 xml 文件进行操作, 包括创建 xml, 对 xml 文件进行增删改查操作.

1. 常见的 xml 解析技术
1.1 DOM 解析

是官方提供的解析方式, 基于 xml 树解析的

1.2 SAX 解析

是民间的解析方式, 基于事件的解析

1.3 JDOM 解析

第三方提供, 开源免费的解析方式, 比 DOM 解析快

1.4 DOM4J 解析

第三方提供, 开源免费, 是 JDOM 的升级版


2. DOM4J 解析 XML

需要导入 dom4j 的 jar 包, 解析 xml 的入口, 是需要先拿到一个 Document 对象

2.1 读取 xml 文件中的信息
public class TestXml {
public static void main(String[] args) throws Exception {
// [1] 创建SAXReader对象, 用于读取xml文件
SAXReader reader = new SAXReader();
// [2] 读取xml文件, 得到Document对象
Document doc = reader.read(new File("src/scores2.xml"));
// [3] 获取根元素
Element root = doc.getRootElement();
// [4] 获取根元素下所有子元素
Iterator<?> it = root.elementIterator();
while(it.hasNext()) {
// 取出元素
Element e = (Element) it.next();
System.out.println(e.getName());
// 获取id属性
Attribute id = e.attribute("id");
System.out.println(id.getName() + "=" + id.getValue());
// 获取student的子元素
Element name = e.element("name");
Element course = e.element("course");
Element score = e.element("score");
// 打印
System.out.println(name.getName()+ "=" + name.getStringValue());
System.out.println(course.getName() + "=" + course.getText());
System.out.println(score.getName() + "=" + score.getText());
System.out.println("--------------------------------------");
}
}
}
2.2 生成 xml 文件
public class TestXml2 {
public static void main(String[] args) throws Exception {
// [1] 通过DocumentHelper生成一个Document对象
Document doc = DocumentHelper.createDocument();
// [2] 添加并得到根元素
Element root = doc.addElement("books");
// [3] 为根元素添加子元素
Element book = root.addElement("book");
// [4] 为book元素添加属性
book.addAttribute("id", "b01");
// [5] 为book添加子元素
Element name = book.addElement("name");
Element author = book.addElement("author");
Element price = book.addElement("price");
// [6] 为子元素添加文本
name.addText("Thinking in Java");
author.addText("小伟");
price.addText("88");
// [7] 格式良好的输出
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(new
File("src/book2.xml")), format);
writer.write(doc);
// [8] 关闭资源
writer.close();
}
}

一:XML知识整理的更多相关文章

  1. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  2. Spring Ioc知识整理

    Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每个bean元素都有一个id属性,用于唯一标识实例化的一个类,其实name属性也可用来 ...

  3. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  4. NLTK 知识整理

    NLTK 知识整理 nltk.corpus模块自带语料 NLTK comes with many corpora, toy grammars, trained models, etc. A compl ...

  5. Android开发——Fragment知识整理(一)

    0.  前言 Fragment,顾名思义是片段的意思,可以把Fragment当成Activity的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成.Fragment需要被嵌 ...

  6. OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理

    开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...

  7. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  8. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  9. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

随机推荐

  1. JavaWeb -cookie&session&application

    cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...

  2. LOJ#2015. 「SCOI2016」妖怪(凸包)

    传送门 首先可以把每个妖怪看成二维平面上的一个点,那么每一个环境\((a,b)\)就可以看成一条斜率\(k=-\frac{b}{a}\)的过该点的直线,战斗力就是这条直线在两坐标轴上的截距之和 对于每 ...

  3. PHP中count()和sizeof()

    php中获取数组长度函数有两个count()和sizeof(),如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0.两函数功能一样,手册上讲,sizeof() ...

  4. robot framework学习笔记之一 资源文件(Resource)和外部资源(External Resources)

    一.资源文件(Resource) 测试套件主要是存放测试案例,资源文件主要是用来存放用户关键字. 添加资源    在目录型的Project/Test Suite下单击鼠标右键,选择『New Resou ...

  5. AWS 推出长期支持的 OpenJDK 免费分发版本 —— Amazon Corretto

    简评:听说 Oracle JDK 要收费了,Oracle 要限制 Java 的商业或生产用途,针对这个问题,AWS 将会推出 Amazon Corretto. Java 是 AWS 用户使用的最流行的 ...

  6. Java常见错误及解决方案

    1.类定义未找到:java.lang.NoClassDefFoundError java类文件没有上传:上传了,服务器没找到,建议将JSP页面重新更新或重启服务器. 2.

  7. 40.oracle事务

    一.事务特性 事务必须具备以下四个特性,简称ACID属性 原子性(Atomicity):事务是一个完整的操作.事务的各步操作是不可分割的(原子的):要么都执行,要么都不执行场景:银行转账 A-100 ...

  8. 2016级算法第六次上机-D.AlvinZH的学霸养成记V

    1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × ...

  9. 题目1006:ZOJ问题(字符串处理)

    问题来源 http://ac.jobdu.com/problem.php?pid=1006 问题描述 输入一个只包含'z','o','j'三种字符的字符串,判断是否符合要求. 问题分析 分析AC的三个 ...

  10. CUDA安装

    1.CUDA是什么? CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台. 随着显卡的发展,GPU越来越强大,而且GPU为显示图像做 ...