首页 > Java Web之XML基础

Java Web之XML基础

有好几天没有更新博客了,前段时间因为要开学了,需要凑足学费才能继续在学校学习,耽误了几天,这两天需要补充前面需要学习的一些知识点了。今天就开始进入JavaWeb阶段吧,这段时间我们需要了解一些前端的知识,还有数据库方面的等等,具体的我下次回顾的时候再谈,今天就开始XML方面的一些基础知识的回顾吧!!

 

一. xml概述



1.1.xml是什么?

Extensible Markup Language 可扩展标记语言。

标记语言:不止存储文本内容,也存储和内容相关的其他信息

W3C 1998 1.0

xml是一种数据存储格式, 本质上就是一段字符串。

xml是如何来保存数据的?

xml中允许用户自定义标签, 标签分为开始标签和结束标签。开始标签和结束标签之间可以嵌套其他的标签。

正是利用标签来保存数据, 利用标签之间嵌套关系来保存数据之间的层级关系。



1.2.xml的应用场景

(1)传输数据

由于xml本质上是一段字符串, 具有跨平台的特性, 因此可以在不同系统之间进行数据交换。



(2)用作配置文件

由于xml可以保存有结构的数据, 因此xml常被用来用作应用程序的配置文件。



1.3.xml文件

编写一个xml文件

 

1.4.xml校验

校验xml文件

 

二. 语法

2.1.文档声明

用来声明当前xml基本属性信息的, 解析器会根据文档声明来决定如何解析xml文件。

注意:

一个xml文件必须包含且只能包含一个文档声明。

文档声明必须放在xml文件的第一行,前面不能有任何内容。

如果一个xml文件没有包含文档声明, 则该xml是一个不符合规范的xml文件。

写法:



version用来声明当前xml所遵循的xml规范, 目前就是1.0



encoding用来声明当前xml所使用的字符集编码, xml解析器在解析xml的时候,会根据encoding属性所指定的编码来解析xml文件。

注意: 文件在保存时所使用的编码要和encoding属性所指定编码相同, 才可以避免乱码问题。



standalone用来声明当前文档是否独立, 如果xml文档不依赖其他的文档而存在, 表明当前文档是一个独立的文档, 可以指定值为yes, 如果当前文档需要依赖其他的文档而存在, 需要指定值为no。

2.2.元素

◇ 一个标签(标记)就是一个元素。

◇ 标签分为开始标签和结束标签, 在开始标签和结束标签之间的文本称之为标签体。

◇ 如果一个标签既不包含标签体, 也不包含其他的子标签, 可以把开始标签和结束标签合并成一个自闭标签。

◇ 标签要合理的嵌套, 不能出现交叉嵌套。

◇ 一个xml文件有且仅有一个根标签。

◇ 元素的命名规范:

区分大小写。 如:

是两个不同的标签。

不能以数字或标点符号开头。

不能以xml(XML, Xml)开头。

不能包含空格 如:

不能包含冒号 如:

易犯错误:

标签没有结束标签或者是自闭标签没有自闭!!!

2.3.属性

一个元素上可以声明多个属性, 多个属性之间用空格隔开。

属性与属性值用等号连接, 属性的值用单引号或者双引号引起来。

属性的命名和元素遵循相同的命名规范。

 

 

2.4.注释 (了解)

格式:

注释不能放在文档声明的前面

注释不能交叉嵌套



2.5.转义字符 (了解)

常用的转义字符:

< <

> >

& &

" "

' '



三.xml约束 (了解)

约束: 在xml中, 可以提供约束文档来约束xml文档的写法

DTD/Schema W3C

DTD:简单易学,上手快,但是功能有局限性,不能限制标签体的值的类型或者值的范围

Schema:复杂,不好学,但是可以实现精细的限定

 


 

1.     XML Schema

1.1.         XML Schema概述

1.1.1.              XML Schema

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性

1.1.2.              Schema与 DTD的比较:

XML Schema符合XML语法结构。

DOM、SAX等XML API很容易解析出XML Schema文档中的内容。

XML Schema对名称空间支持得非常好。

XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。

XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。 

1.2.         Schema约束快速入门

1.2.1.              快速入门

XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。

一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。

和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema。

编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。

 


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.tedu.cn  http://www.tedu.cn/book.xsd">数据结构严蔚敏29.00元

 

 
targetNamespace=“http://www.tedu.cn"elementFormDefault="qualified">

 

 

1.3.         名称空间(namespace)

1.3.1.              名称空间的概念

在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:

       

                 ……

       

         此处使用tedu来指向声明的名称,以便于后面对名称空间的引用。

注意:名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL:http://www.tedu.cn根本没有指向任何文件,只是一个分配的名字。

1.3.2.              XML中使用名称空间引入Schema

为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:

       

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation=“http://www.tedu.cn book.xsd">

schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。

注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。

1.3.3.              使用默认名称空间

基本格式:

        xmlns="URI" 

举例:

        <书架 xmlns="http://www.tedu.cn"

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation=“http://www.tedu.cn book.xsd">

                 <书>

                 <书名>数据结构

                 <作者>严蔚敏

                 <售价>29.00元

                

        <书架>

1.3.4.              使用名称空间引入多个XML Schema文档

文件清单:xmlbook.xml

<书架 xmlns="http://www.tarena.org/xmlbook/schema"

                xmlns:demo="http://www.tarena.org/demo/schema"

                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                xsi:schemaLocation="http://www.tarena.org/xmlbook/schema                                                   http://www.tarena.org/xmlbook.xsd

                http://www.tarena.org/demo/schema http://www.tarena.org/demo.xsd">

        <书>

                 <书名>JavaScript网页开发

                 <作者>张孝祥

                 <售价 demo:币种=”人民币”>28.00元

       

 

1.3.5.              不使用名称空间引入XML Schema文档

文件清单:xmlbook.xml

<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:noNamespaceSchemaLocation="xmlbook.xsd">

        <书>

                 <书名>JavaScript网页开发

                 <作者>张孝祥

                 <售价>28.00元

       

 

1.3.6.              在XML Schema文档中声明名称空间

                        targetNamespace="http://www. tedu.cn"

                        elementFormDefault="qualified">

 

targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。

elementFormDefault元素用于指定,该schema文档中声明的根元素及其所有子元素是否都属于targetNamespace所指定的名称空间。

 

1.4.         Schema语法


 



四.xml解析

4.1.两种解析思想 (!!!重要)

DOM解析:

将整个XML文档加到内存中,用一个Document对象来表示整个文档。将XML文档中所有的内容(元素、属性、文本等)都解析成一个一个的对象,用对象来表示元素,用对象与对象之间的引用关系来表示元素之间的层级关系。通过在程序中操作对象来间接的操作(增删改查)XML文档中的内容。



优点:

(1)可以十分方便对节点进行增删改查的操作。

(2)在内存中保存了一颗文档结构树, 只需要解析一次就可以重复使用这些数据。

缺点:

(1)将整个文档都加载到内存中用对象表示,占用内存空间,如果xml文档体积非常庞大时,将会十分耗费内存。

(2)需要等整个xml文档解析完成后,才可以对节点进行操作,相对来说耗费时间,效率低。

package cn.tedu.dom4j;import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;public class Demo1 {// junit:可以模拟程序的运行环境,测试一个方法@Testpublic void find() throws DocumentException{// 需求:查询第一本书的书名,并输出到控制台//1. 创建一个SaxReader对象-用来解析XML的核心类SAXReader reader=new SAXReader();//2. 解析一个XML-返回一个解析好的document对象Document document=reader.read("book.xml");//3. 通过document返回一个RootElementElement rootEle=document.getRootElement();//4. 获取所有元素的迭代器Iterator it=rootEle.elementIterator();//5. 迭代所有元素while(it.hasNext()){Element e=it.next();if("书".equals(e.getName())){Iterator it2=e.elementIterator("书名");while(it2.hasNext()){Element e2=it2.next();System.out.println("name="+e2.getName());String value=e2.getText();System.out.println("value="+value);}break;}}}}

  

SAX解析:

优点:

(1)由于是逐行解析,因此不需要将整个XML文档加载进内存,占用内存小。理论上多大的XML文件都可以解析

(2)由于是逐行解析,遇到想要的内容就可以停下来处理,效率高

缺点:

(1)每次需要数据都需要重新解析。

(2)只能读数据,不能对XML文档进行增删改的操作。



4.2.DOM4J解析

转载于:https://www.cnblogs.com/tangdiao/p/9594631.html

更多相关:

  • 参考文档...

  • zeal是一个windows上的开源的离线文档浏览工具,基于docset格式,可以兼容全部dash的文档。zeal没有代码片段管理的功能,只提供文档浏览功能,不过windows下的用户可算是有的用了。dash目前只提供mac上的版本,作者说有往windows上移植的打算,但迟迟没有动工。 刚安装好之后是没有文档可以看的, 需要自己下...

  • 2019独角兽企业重金招聘Python工程师标准>>> 王超:奇虎360MongoDB     MongoDB是高性能开源文档数据库,也是目前最受关注的NoSQL技术之一,以敏捷、可扩展和对企业应用友好(支持事务,一致性和数据完整性保证。该文档具体讲到了奇虎360为什么会使用MongoDB?MonoDB在亿级数据规模...

  •    本来不打算写这个博客的,我讨厌的话题,但是现实中遇到很多事情让我觉得是我沟通有问题!沟通是两个人的事情,做技术的人你和别人沟通需要看对方是什么水平的人,啥也不懂,啥也不会的人,你用那么专业的术语来描述,肯定解决不了问题。最好是举一些通俗易懂的例子    作为一个新人,我们应该在遇到问题的时候,先自己尝试去了解一些东西,比如:一...

  • 转自https://github.com/SXHSine/Mitsuba-Usage-with-Python27 # -*- coding: UTF-8 -*- import os import sys # NOTE: remember to specify paths using FORWARD slashes (i.e. '/'...

  • xml的格式如下,就是通过<>节点来区别数据结构的: 22008141100

    .NET调用JAVA的WebService方法

      调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料,但是都整理的不够清晰明了。根据网上的资料,个人也对各种方法进行了尝试,费了不少精力,为此特将自己的解决方法进行总结一下,以备以后需要...

  •  FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.         一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH...

  • 导读:在前面介绍了很多关于XML和HTML的东西,他们其实各有各的好处,在很多时候都需要结合起来使用。现在已经有XML和HTML结合的产物:XHTML(可扩展超文本标记语言)。在本篇博客中,则主要介绍通过引入命名空间的方法,进行XML和HTML混合使用的例子。 一、在XML中使用HTML 1.1,代码

    -->