您现在的位置:首页 >> 前端 >> 内容

XML基础知识

时间:2016/12/30 9:32:22 点击:

  核心提示:第01章:XML简介eXtensibleMarkup Language1.01 XML简介XML是一种可扩展的标签语言XML即可用来做数据传递的,也可用来做数据显示,例如:android中用xml做布...

第01章:XML简介eXtensibleMarkup Language

1.01 XML简介

XML是一种可扩展的标签语言

XML即可用来做数据传递的,也可用来做数据显示,例如:android中用xml做布局

HTML是一个不可扩展的标签语言,即HTML中的标签事先由W3C组织预先定义好的,程序员不能随意添加

XML中的标签,可以由程序员按规则自行定义,不仅可以使用英文,也可以使用中文

第02章:XML在企业中应用

2.01 XML在企业中的应用主要有三点:

01——存储数据,即XML可以看作一个小型的数据库来存储数据

02——传输数据,即服务器可以将XML以IO流的方式传输到客户端

03——软件配置,即XML可以配置软件信息,如JavaEE中的web.xml

第03章:XML文档的树形结构

3.01 XML文档的树形结构

如果一个XML书写的语法是正确的,它加载到内存后,

会形成一个倒状的树结构,且只有一个根节点,依然遵循DOM规则,分为四类节点:

01——文档节点(一个)

02——元素节点

03——属性节点

04——文本节点

01_base.xml

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

<bookstore>

<book id="isbn100">

<title>Java编程思想</title>

<author>哈哈</author>

<price>88</price>

</book>

</bookstore>

倒状的树结构:

第04章:XML语法

4.01 XML语法

要学好XML,必须要对语法有所了解,XML语法分为七大部份,分别为:

01——文档声明

<?xmlversion="1.0" encoding="UTF-8"?>

位于XML文件第一行,该行前不能有空行,空格或注释

version="1.0"表示让浏览器用xml1.0版本的解析器来解析

encoding="UTF-8"表示保存时或编码时用UTF-8编码,且浏览器用UTF-8来解码

02——元素/标签/节点

XML中的元素,就是标签,标签通常由开始标签和结束标签组成,中间

是标签体,如果没有标签体的话,该标签叫空标签,用<a></a>或<a/>书写

XML中标签不能交叉乱嵌套

<a><b>乱嵌套</a></b>

空白符会被XML解析器看作是有效的字符

XML标签的命名要遵循规范,尽量做到见名知义,可以使用中英文字符

XML中标签与HTML中的标签可以同名,但含义却不同

03——属性

属性一定出现在开始标签中,可以在开始标签中书写0个或多个属性

由属性名和属性值组成,其中属性值要单引号或双引号引起来

属性名的命名要遵循规范,尽量做到见名知义,可以使用中英文字符

<桌子 宽=”100cm” 高=”30cm”/>

04——注释

XML中的注释为<!—*****-->

注释是给程序员看的,不是给XML解析器看的

注释不能嵌套

<!—乱<!--嵌-->套-->

05——CDATA【CharacterData】区段

与注释的功能相反,CDATA区中的内容是给XML解析器看的,不是给程序员看的,

XML解析器会除空白符外,原样对待

<![CDATA[

selectname,age from users where age<13

]]>

06——-转义字符

XML中的转义字符

<-------&lt; less than

>-------&gt; greater than

&lt; &lt;大话数据结构&gt;&gt;

07——处理指令,了解即可

指挥XML解析器如何解析XML文档内容

XML可以与CSS配置使用,从而显示出不同的效果,不过项目中,HTML才和CSS配合

而XML主要做数据储存,软件配置,传递信息

02_book.xml

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

<?xml-stylesheet type="text/css" href="css/itcast.css"?>

<bookstore>

<book id="isbn100">

<title>Java编程思想</title>

<author>哈哈</author>

<price>88</price>

</book>

</bookstore>

itcast.css

title{

color:red;

}

author{

color:green;

}

price{

color:blue

}

第05章:DTD简介DocumentType Definition

5.01 为什么XML文件需要约束

同一个应用需求,如果不同的程序员,可能会写多种不同的XML文件,

这就造成了将来我们用Java解析XML文件带来了负担,所以需要用一种

技术去约束XML的书写规则,这样每个程序员只能写出一种XML文件

5.02 常用的XML约束有二种

01——DTD(易用性,只有基本功能,用DTD语法书写)

02——Schema

第06章:DTD嵌入到XML中的三种方式

6.01 DTD不能单独被浏览器解析执行,必须嵌入到XML中才有效

6.02 DTD有三种方式嵌入到XML文件中,分别是:

01——内部DTD,即DTD直接书写在XML文件中

<!DOCTYPE 根节点 [DTD内容]>

03_bookstore.xml

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

<!DOCTYPE bookstore [

<!ELEMENT bookstore (book)>

<!ELEMENT book (title,author,price)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT price (#PCDATA)>

]>

<bookstore>

<book>

<title>Java编程思想</title>

<author>哈哈</author>

<price>88</price>

</book>

</bookstore>

02——外部本地DTD,即DTD与XML分开书写,

在XML文件中通过处理指令引用【本地】的DTD文件

<!DOCTYPE 根节点 SYSTEM “本地DTD的路径”>

04_bookstore.xml

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

<!DOCTYPE bookstore SYSTEM "dtd/book.dtd">

<bookstore>

<book>

<title>Java编程思想</title>

<author>哈哈</author>

<price>88</price>

</book>

</bookstore>

book.dtd

<!ELEMENT bookstore (book)>

<!ELEMENT book (title,author,price)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT price (#PCDATA)>

03——外部远程/公共DTD,即DTD与XML分开书写,

在XML文件中通过处理指令引用【远程】的DTD文件

<!DOCTYPE 根节点 PUBLIC “DTD名字” “远程DTD的路径”>

远程DTD的路径下,就是具体DTD的约束文件,全世界所有的HTML都必须符合这个规则

<!DOCTYPE html PUBLIC

"-//W3C//DTD HTML 4.01 Transitional//EN" https://www.w3.org/TR/html4/loose.dtd

>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

这是HTML

</body>

</html>

第07章:DTD语法

7.01 DTD语法分为三类,分别是:

01——元素【ELEMENT】

<!ELEMENT 元素 内容声明>

*:元素可以出现0次或多次

+:元素可以出现1次或多次

无:元素只能出现1次

|:元素可以二者选其一

():元素进行分组

? :元素可以出现0次或1次

, :元素必须按照一定的顺序

#PCDATA:表示元素的内容必须是文本,中文,英文,数字均可

EMPTY大写字母:表示元素中必须为空

ANY大写字母:表示元素中可以有任何内容,包含子元素,文本,空,很灵活,不建议

注意:EMPTY和ANY在定义元素时,不能书写括号

02——属性【ATTLIST】

属性必须出现在元素上

<!ATTLIST 元素名

属性名 属性类型 属性约束

属性名 属性类型 属性约束>

属性名要遵循规范,尽量做到见名知义,可以使用中英文

属性类型包括:

01——ID:表示唯一的字符串,以字母开头,如:it01

02——IDREF:表示这个唯一的值,要与另一个ID类型的属性值相同

03——(枚举值):表示取值只能是枚举中的任何一个

04——CDATA:表示属性值是字符串类型

属性约束包括:

01——#REQUIRED:表示该属性必写

02——#IMPLIED:表示该属性可写可不写

03——#FIXED"JavaEE":表示该属性可写可不写,如果写的话,一定要叫JavaEE

04——"缺省值":表示该属性可写可不写,如果不写的话,就用默认值,

如果写的话,就用实际值替代默认值

03——实体【ENTITY】

实体就是用一个变量去替代一个特殊的字符串

实体可以分为:

01——内部引用实体

在DTD中声明,在XML中使用

<!ENTITY it “我是一个程序员”>

&it;

注意:将DTD和XML合并

02——外部参数实体

在DTD中声明,在DTD中使用

<!ENTITY % tip “name,loc”>

带有%叫参数实体

不带%叫引用实体

<!ELEMENT 客户(%tip;)>

<!ELEMENT 员工 (%tip;)>

第08章:Java按照DOM规则解析XML文件

8.01 什么是解析XML文件

就是从XML文件中,提取对该应用有用的文本的过程

8.02 为什么要解析XML文件

一篇XML文件可能有很多内容,但对该应用的某个功能来讲,可能只需要其中某些片段就可以了,

不需要整个XML文件,并且XML文件中的标签只是一个辅助信息,只需要标签中的内容就行了,

这就需要对XML文件有用的地方进行解析,从而只提取有用的内容

8.03 解析XML文件为分二个类别,分别是:

01——DOM(DocumentObject Model)方式

W3C推荐的解析XML方式

一次性加载到内存,将XML文件形成一个倒状树结构

从树根开始遍历,这一点思想和javascript中DOM是相同的

JavaEE学的是DOM4J解析器,开源免费,导入dom4j-1.6.1.jar到工程的classpath路径中

Android学的是PULL解析器,开源免费,Android内置PULL解析器所需要的jar包

02——SAX(Simple Api for Xml)方式

多次性加载到内存,按事件方式依次处理

8.04 Java解析XML文件:

遍历每个节点属性值和节点之间的内容

Demo01.java

/**

* 遍历每个节点属性和节点之间的内容

*/

public class Demo01 {

/**

* 主函数

*/

public static void main(String[] args) throws Exception{

SAXReader saxReader = new SAXReader();

InputStream is = Demo01.class.getClassLoader().getResourceAsStream("bookstore.xml");

Document xmlDocument = saxReader.read(is);

Element rootElement = xmlDocument.getRootElement();

List<Element> bookElementList = rootElement.elements("book");

//迭代

for(Element bookElement : bookElementList){

//获取book节点的属性id的值

String id = bookElement.attributeValue("id");

//由book节点先定位到title子节点,再获取title子节点之间的内容

String title = bookElement.element("title").getText();

String auth = bookElement.element("auth").getText();

String price = bookElement.element("price").getText();

//提示

System.out.println("编号:"+id);

System.out.println("标题:"+title);

System.out.println("作者:"+auth);

System.out.println("单位:"+price);

System.out.println("======================================");

}

}

}

第09章:XPath表达式(//user[@name='哈哈' and @gender=’男’ and @age>’30’])

9.01 什么是XPath

XPath是一个用于在XML文件中,快速查询符合条件标签的技术

9.02 为什么要用XPath

如果按照dom4j的传统做法,查找一个具有多层结构的标签,非常麻烦,效率太低,

如果要用XPath,能直接定位该元素,但必须导入dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar

到工程的classpath路径中

9.03 XPath常用的API

Stringxpath = "//user[@name='哈哈' and @pass='123']";书写一个XPath字符串,属性值要单引号

Elementelement = (Element) xmlDocument.selectSingleNode(xpath);返回一个集合中的第一个元素

List<Element>list = xmlDocument.selectNodes(xpath) ;返回一个集合

Node是父接口,Element是子接口

Demo02.java

/**

* 使用XPath表达式来定位节点,并获取节点之间的内容

*/

public class Demo02 {

/**

* 主函数

*/

public static void main(String[] args) throws Exception{

SAXReader saxReader = new SAXReader();

InputStream is = Demo07.class.getClassLoader().getResourceAsStream("bookstore.xml");

Document xmlDocument = saxReader.read(is);

//用xpath表达式定位XML文件中的title节点

String xpath = "/bookstore/book/title";

//获取符合xpath表达式匹配的所有节点的第一个

//Element titleElement = (Element) xmlDocument.selectSingleNode(xpath);

//获取符合xpath表达式匹配的所有节点

List<Element> titleElementList = xmlDocument.selectNodes(xpath);

for(Element titleElement : titleElementList){

String title = titleElement.getText();

System.out.println(title);

}

}

}

users.xml

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

<classs>

<user name="哈哈" gender="男" age="22"/>

<user name="呵呵" gender="男" age="23"/>

<user name="嘻嘻" gender="女" age="24"/>

</classs>

Demo03.java

/**

* 用户名是否在XML文件中存在

*/

public class Demo08 {

/**

* 根据用户名和性别在XML文件中查询是否有该用户,

* @param name 用户名

* @param gender 性别

* @return是否存在,true表示存在,false表示不存在

*/

private static boolean exists(String name,String gender,int age) throws Exception {

boolean flag = false;

SAXReader saxReader = new SAXReader();

InputStream is = Demo08.class.getClassLoader().getResourceAsStream("users.xml");

Document xmlDocument = saxReader.read(is);

String xpath = "//user[@name='"+name+"' and @gender='"+gender+"' and @age>'"+age+"']";

List<Element> userElementList = xmlDocument.selectNodes(xpath);

if(userElementList.size()>0){

flag = true;

}else{

;

}

return flag;

}

/**

* 主函数

*/

public static void main(String[] args) throws Exception{

boolean flag = exists("呵呵","男",20);

if(flag){

System.out.println("存在该用户名");

}else{

System.out.println("不存在该用户名");

}

}

}

Tags:XM ML L基 基础 
作者:网络 来源:sjpstudy的博