XML文件的默认打开方式是浏览器
xml:是可扩展的标记语言 Extensible Markup Language。以一种标签语言与HTML类似1、xml的作用
- 编写配置文件:C3P0编写XML配置文件
- 做数据传输
- 必须是格式良好的XML文档
- 使用DTD和XSD(XML Schema)定义语义约束
- 声明信息,用于描述XML的版本和编码方式
- XML要有且仅有一个根元素。一个元素是一对标签,标签里面是内容
- XML是大小写敏感的
- XML是标签成对的,而且要正确嵌套
- 属性值要使用双引号。
- 注释的写法
【案例1】:描述一下学生的信息
二、DTD 1、DTD简介王彤 Java 89 李佳 sql 58
2、DTD作用DTD:文档类型定义 document Type Definition
- 约束XML文档格式,保证XML是一个有效的XML文档
DTD在使用的时候可以分为两种
- 内部DTD
- 外部DTD
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
【元素声明语法】
【数量词】 限制元素出现的次数
| 数量词 | 含义 |
|---|---|
| + | 表示出现一次或者多次 |
| ? | 出现零次或一次 |
| * | 出现零次或多次,即任意次 |
属性声明使用下列语法:
【属性类型】:CDATA,表示字符数据(character data)
【默认值】:
- #REQUIRED:必须出现
- #IMPLIED:不是必须的
【格式良好的DTD约束的XML文档】
【案例1】:描述一下学生的信息使用DTD约束
]>3.2 外部DTD王彤 Java 89 李佳 sql 58 张三 html 88
创建一个独立的DTD文件
在XML文件中引入DTD文件
三、约束和验证XML 1、XSD王彤 Java 89 李佳 sql 58
- XSD
- XML Schema是DTD的替代者
- 不仅可以定义XML文档的结构, 还可以规范文档的内容
- XSD本身也是XML文档,
- XSD采用XML文档来定义语义约束,比DTD要复杂一-些,但是功能强大的多。
- 支持丰富的数据类型
- 允许开发者自定义数据类型
- 可读性强
- 可针对未来需求进行扩展
2.1常见的XML解析技术有哪些? 2.1.1 DOM解析对XML文件的操作,包括创建XML,对XML文件的增删改查操作
基于XML树结构,耗费资源。是官方提供的解析方式
2.1.2 SAX解析是民间的解析方式,SAX是基于事件的解析方式,消耗的资源少。数据量大的时候适用
2.1.3 JDOM解析以上两种都是原生的解析方式,代码量巨大
第三方提供的解析,开源,免费的解析方式,效率比DOM解析快
2.1.4 DOM4J接口**第三方提供的解析,开源,免费的解析方式,是JDOM的升级版
2.2 使用DOM4J解析XML解析XML入口是一个对象,是需要先拿到一个document对象
2.2.1读取XML文档中的信息- 导包:dom4j.jar
- 编写代码测试【如下】
public class Test {
public static void main(String[] args) {
//[1]创建SAX对象,用于读取XML文件
SAXReader reader = new SAXReader();
document doc = null;
try {
// [2]读取xml文件,找到document对象
doc = reader.read(new File("src"+File.separator+"com"+File.separator+"wei"+File.separator+"xml"+File.separator+"Student2.xml"));
//[3]获取根元素 getRootElement
Element root = doc.getRootElement();
//System.out.println("根元素:"+root.getName());
//[4 iterator]迭代器迭代更元素下的所有元素
Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();
//System.out.println(element.getName());
//[5]取属性 Iterator attributes = element.attributeIterator(); 多个属性迭代继续
Attribute id = element.attribute("id");
//System.out.println(id.getName()+"="+id.getValue());
//[6]获取子元素
//[7]打印输出
System.out.println("id="+element.attribute("id").getName()+"-----"+"value="+element.attribute("id").getText());
System.out.println("name="+element.element("name").getName()+"-----"+"value="+element.element("name").getText());
System.out.println("score="+element.element("score").getName()+"-----"+"value="+element.element("score").getText());
System.out.println("course="+element.element("course").getName()+"-----"+"value="+element.element("course").getText());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.2.2 使用dom4j生成XML文件
public class Test2 {
public static void main(String[] args) {
// [1] 通过documenthelper创建一个documnet对象
document doc = documentHelper.createdocument();
// [2] 写一个Xml文件,添加一个根元素,并得到根元素
Element root = doc.addElement("books");
// [3] 为根元素添加元素
Element book = root.addElement("book");
// [4] 为元素添加属性 方便链式编程
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("efcod");
price.addText("88");
// [7] 将doc输出到XML文件中即可
Writer writer = null;
Writer writerFormat = null;
try {
writer = new FileWriter(new File("src"+File.separator+"com"+File.separator+"wei"+File.separator+"dom4j"+File.separator+"book2.xml"));
writerFormat = new FileWriter(new File("src"+File.separator+"com"+File.separator+"wei"+File.separator+"dom4j"+File.separator+"bookFormat.xml"));
doc.write(writer);
// [8] 格式良好的输出
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer2 = new XMLWriter(writerFormat,format);
writer2.write(doc);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if (writer!=null) {
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (writerFormat!=null) {
writerFormat.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}



