JAVAWeb(1)——XML"/>
JAVAWeb(1)——XML
1.XML介绍:
extendsible markup langange 可扩展的标记语言
跨平台、可扩展、基于文本的描述数据的标准。
1.可以用来存放数据(一般使用数据库存放数据)
2.可以用来做配置文件
3.数据传输载体
2.XML的文档声明
<?xml version="1.0" encoding="UTF-8"?>
3.XXML的元素定义
<?xml version="1.0" encoding="UTF-8"?>
<stu>
<name>张三</name>
<age/>
</stu>
1.其实就是 里面的标签,<>括起来的都叫元素。成对出现。
2.文档声明下来的第一个元素叫做根元素 (根标签)
3.标签里面可以嵌套标签
4.空标签
既是开始也是结束。- 般配合属性来用。
5.标签可以自定义。
4.属性的定义
属性的定义 <元素名称属性名称="属性的值" ></元素名称>
<?xml version="1.0" encoding="UTF-8"?>
<stu id="10090">
<name>张三</name>
<age>23</age>
</stu>
5XML的注释
xml的注释,不允许放置在文档的第一行。必须在 文档声明的下面。
6.CDATA区
-
非法字符
严格地讲,在 XML 中仅有字符 “<“和”&” 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
< <& &
如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA来包装。 不过这个CDATA 一般比较少看到。 通常在服务器给客户端返回数据的时候。
<desc><![CDATA[<a href="">我是百度浏览器</a>]]></desc>
7XML解析方式
有很多种,但是常用的有两种。
- DOM:
document object model把整个xm|全部读到内存当中,形成树状
结构。 整个文档称之为document对象,属性对应Attribute对象,所有的元素节点对应Element对象,文本也可以称之为Text对象,以上所有对象都可以称之为Node节点。如果xml文件特别大,会造成内存溢出。
- SAX
Simple API for Xml基于事件驱动。读取一行,解析一行。
不会造成内存溢出。不可以进行增删 , 只能查询
8针对这两种解析方式的API
jaxp sun公司
jdom
dom4j 广泛使用
package com.guada.xmltest;import java.io.File;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class xmltestDemo {/*** @param args*/public static void main(String[] args) {try {//1.创建SAX读取对象SAXReader reader = new SAXReader();//2.读取指定的xmlDocument document = reader.read(new File("E:\\JAVA代码\\XmlDemo\\src\\com\\guada\\xml\\demoxml.xml"));//3.获取元素Element rootElement = document.getRootElement();System.out.println(rootElement.getName());} catch (DocumentException e) {e.printStackTrace();}}}
9.dom4j里面支持xpath的写法。
xpath其实是xm1的路径语言 。支持我们在解析xm1的时候,能够快
速的定位到具体的某一个元素。
-
添加jar包依赖
jaxen-1.1-beta-6.jar
-
在查找指定节点的时候,根据XPath语法规则来查找
-
后续的代码与以前的解析代码一样。
public class xmltestDemo {/*** @param args*/public static void main(String[] args) {try {//1.创建SAX读取对象SAXReader reader = new SAXReader();//2.读取指定的xmlDocument document = reader.read(new File("E:\\JAVA代码\\XmlDemo\\src\\com\\guada\\xml\\demoxml.xml"));//3.获取根元素Element rootElement = document.getRootElement();//4.使用XpathList<Element> nameElement = rootElement.selectNodes("//name");for (Element element : nameElement) {System.out.println(element.getText());}} catch (DocumentException e) {e.printStackTrace();}}}
10XML 约束
- DTD
语法自成一派, 早起就出现的。 可读性比较差。
-
引入网络上的DTD
-
引入本地的DTD
-
-
直接在XML里面嵌入DTD的约束规则
<!ELEMENT stu (name,age)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)>
]>
张三 18<!ELEMENT stus (stu)> : stus 下面有一个元素 stu , 但是只有一个<!ELEMENT stu (name , age)> stu下面有两个元素 name ,age 顺序必须name-age<!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)><!ATTLIST stu id CDATA #IMPLIED> stu有一个属性 文本类型, 该属性可有可无元素的个数:+ 一个或多个* 零个或多个? 零个或一个属性的类型定义 CDATA : 属性是普通文字ID : 属性的值必须唯一<!ELEMENT stu (name , age)> 按照顺序来 <!ELEMENT stu (name | age)> 两个中只能包含一个子元素
-
Schema
其实就是一个xml , 使用xml的语法规则, xml解析器解析起来比较方便 , 是为了替代DTD 。
但是Schema 约束文本内容比DTD的内容还要多。 所以目前也没有真正意义上的替代DTD约束文档:
<!-- xmlns : xml namespace : 名称空间 / 命名空间targetNamespace : 目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 elementFormDefault : 元素的格式化情况。 --><schema xmlns="" targetNamespace="" elementFormDefault="qualified"><element name="teachers"><complexType><sequence maxOccurs="unbounded"><!-- 这是一个复杂元素 --><element name="teacher"><complexType><sequence><!-- 以下两个是简单元素 --><element name="name" type="string"></element><element name="age" type="int"></element></sequence></complexType></element></sequence></complexType></element></schema>
实例文档:
<?xml version="1.0" encoding="UTF-8"?><!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。--><teachersxmlns:xsi=""xmlns=""xsi:schemaLocation=" teacher.xsd"><teacher><name>zhangsan</name><age>19</age></teacher><teacher><name>lisi</name><age>29</age></teacher><teacher><name>lisi</name><age>29</age></teacher></teachers>
11名称空间的作用
一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。
名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写
<name>张三</name><aa:name></aa:name><bb:name></bb:name>
更多推荐
JAVAWeb(1)——XML
发布评论