当前位置: 首页 > 编程日记 > 正文

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文件。
写法:
<?xml version="1.0"?>
version用来声明当前xml所遵循的xml规范, 目前就是1.0
<?xml version="1.0" encoding="UTF-8"?>
encoding用来声明当前xml所使用的字符集编码, xml解析器在解析xml的时候,会根据encoding属性所指定的编码来解析xml文件。
注意: 文件在保存时所使用的编码要和encoding属性所指定编码相同, 才可以避免乱码问题。
<?xml verison="1.0" encoding="UTF-8"? standalone="yes">
standalone用来声明当前文档是否独立, 如果xml文档不依赖其他的文档而存在, 表明当前文档是一个独立的文档, 可以指定值为yes, 如果当前文档需要依赖其他的文档而存在, 需要指定值为no。

2.2.元素
◇ 一个标签(标记)就是一个元素。
◇ 标签分为开始标签和结束标签, 在开始标签和结束标签之间的文本称之为标签体。
◇ 如果一个标签既不包含标签体, 也不包含其他的子标签, 可以把开始标签和结束标签合并成一个自闭标签。
◇ 标签要合理的嵌套, 不能出现交叉嵌套。
◇ 一个xml文件有且仅有一个根标签。
◇ 元素的命名规范:
区分大小写。 如:<P>和<p>是两个不同的标签。
不能以数字或标点符号开头。
不能以xml(XML, Xml)开头。
不能包含空格 如:<a b>
不能包含冒号 如:<a:b>
易犯错误:
标签没有结束标签或者是自闭标签没有自闭!!!

2.3.属性
一个元素上可以声明多个属性, 多个属性之间用空格隔开。
属性与属性值用等号连接, 属性的值用单引号或者双引号引起来。
属性的命名和元素遵循相同的命名规范。

2.4.注释 (了解)
格式: <!-- xml注释 -->
注释不能放在文档声明的前面
注释不能交叉嵌套

2.5.转义字符 (了解)
常用的转义字符:
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;

三.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文档中编写的元素来自哪里,被谁约束。

<?xml version="1.0" encoding="UTF-8"?>
<tedu:书架 xmlns:tedu="http://www.tedu.cn"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.tedu.cn  http://www.tedu.cn/book.xsd"><tedu:书><tedu:书名>数据结构</tedu:书名><tedu:作者>严蔚敏</tedu:作者><tedu:售价>29.00元</tedu:售价></tedu:书>
</tedu:书架>

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace=“http://www.tedu.cn"elementFormDefault="qualified"><xs:element name='书架' ><xs:complexType><xs:sequence maxOccurs='unbounded' ><xs:element name='书' ><xs:complexType><xs:sequence><xs:element name='书名' type='xs:string' /><xs:element name='作者' type='xs:string' /><xs:element name='售价' type='xs:string' /></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element>
</xs:schema>

1.3.         名称空间(namespace)

1.3.1.              名称空间的概念

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

<tedu:书架 xmlns:tedu=“http://www.tedu.cn”>

<tedu:书>……</tedu:书>

</tedu:书架>

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

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

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

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

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

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

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

<书架 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

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

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

xsi:noNamespaceSchemaLocation="xmlbook.xsd">

<书>

<书名>JavaScript网页开发</书名>

<作者>张孝祥</作者>

<售价>28.00元</售价>

</书>

</书架>

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

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

elementFormDefault="qualified">

<xs:schema>

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<Element> it=rootEle.elementIterator();//5. 迭代所有元素while(it.hasNext()){Element e=it.next();if("书".equals(e.getName())){Iterator<Element> 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

相关文章:

ios NSLayoutConstraint

为了让我们的应用在不同尺寸的屏幕下都能 “正常”的表示&#xff0c;我们尽量不要把数据写死。大多数可视元素都是一个矩形区域&#xff0c;当然这个矩形区域有坐标的&#xff0c;我们有了这个区域坐标就能确定可视元素的现实位置了。但是iphone5和以前的屏幕不一样了&#xf…

分布式技术追踪 2017年第十二期

分布式系统实践 1. 深入Facebook图数据库系统&#xff08;TAO&#xff09;系列 http://dwz.cn/5zQEdo http://dwz.cn/5zQEBK http://dwz.cn/5zQEPV 摘要: TAO是Facebook 的分布式图数据库, 存储了Facebook所有的社交关系数据, TAO的QPS超过30亿, 作者曾经在Facebook做过TAO相关…

linux 统计日志数量总,shell统计日志中时间段内匹配的数量的方法

shell统计日志中时间段内匹配的数量的方法&#xff0c;有需要的朋友可以参考下。假设日志文件mtasvr.log格式如下&#xff1a;T:24583088(04:02:06)[root:Info] 6KqowLDLAgC93DFIKrENAA.41S2:from,to, queuedT:122428336(13:36:51)[root:Info] 6KqowLAbAAByYzJIZGsOAA.2W:from,…

商品评论html,商品评论列表.html

提交取 消new Vue({el: #app,data: {fullLoad:,dialogVisible:false,jsonData:{"id":"","type":"edit","list":[{"type":"grid","icon":"icon-grid-","columns":[{"…

autolayout autoresizing

WWDC 2012 Session笔记——202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇&#xff0c;完整的笔记列表可以参看这里。如果您是首次来到本站&#xff0c;也许您会有兴趣通过RSS&#xff0c;或者通过页面左侧的邮件订阅的方式订阅本站。 AutoLayout…

MongoDB安装和MongoChef可视化管理工具的使用

MongoDBWindows 用户向导&#xff1a;https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/注意&#xff1a;最后一步时&#xff0c;左下角的勾勾要去掉&#xff0c;mongodb compass是图形化管理界面&#xff0c;下载它需要很久很久&#xff0c;还有可能一直…

angular轮播图

还是直接上代码比较好 <!doctype html><html lang"en"><head> <meta charset"UTF-8" /> <title>Document</title> <link rel"stylesheet" type"text/css" href"css/animate.min.css"…

linux 脚本的作用,shell export 作用

shell与export命令用户登录到Linux系统后&#xff0c;系统将启动一个用户shell。在这个shell中&#xff0c;可以使用shell命令或声明变量&#xff0c;也可以创建并运行shell脚本程序。运行shell脚本程序时&#xff0c;系统将创建一个子shell。此时&#xff0c;系统中将有两个sh…

标签选择器用于修改html元素默认的样式,html – 为什么CSS选择器与 sign(直接子)覆盖默认样式?...

问题不是子组合器(>)&#xff0c;它是color属性&#xff0c;它是可继承的。虽然颜色属性的初始值因浏览器而异&#xff0c;但继承是常见的。这意味着元素的文本颜色从父代继承。您在代码中看到这一点。相反&#xff0c;border属性是不可继承的。请注意&#xff0c;与文字颜色…

[hdu1828] Picture

帅哥美女们大家好&#xff01; 今天本蒟蒻补一篇题解&#xff01; 线段树维护扫描线求矩形周长并。 扫描线的话&#xff0c;跟求面积类似&#xff0c;这道题可以只扫一次&#xff0c;也可以x&#xff0c;y两个方向分别扫一次。 题目传送门 1 #include<cstdio>2 #include&…

洛谷 P2126 Mzc家中的男家丁

题目背景 &#xff4d;&#xff5a;&#xff43;与&#xff44;&#xff4a;&#xff4e;的…还没有众人皆知&#xff0c;所以我们要来宣传一下。 题目描述 &#xff4d;&#xff5a;&#xff43;家很有钱&#xff08;开玩笑&#xff09;&#xff0c;他家有&#xff4e;个男家丁…

linux如何查看内存最大的几个文件,详解Linux如何查看当前占用CPU或内存最多的几个进程...

命令ps -aux | sort -k4nr | head -N命令详解&#xff1a;1、head&#xff1a;-N可以指定显示的行数&#xff0c;默认显示10行。2、ps&#xff1a;参数a指代all――所有的进程&#xff0c;u指代userid――执行该进程的用户id&#xff0c;x指代显示所有程序&#xff0c;不以终端…

ios 真机调试

步骤&#xff1a; 一、真机调试所需材料说明二、进入申请界面三、添加App ID四、添加设备(Devices)五、添加证书(Certificates)六、添加描述文件(Provisioning Profiles)七、配置XCode 一、真机调试所需材料说明 在申请真机调试证书之前&#xff0c;先对苹果真机调试所需的文件…

html 表单内容怎么获取不到,jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办?...

jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办&#xff1f;再做一个前台的ajax方法 查网上用formdate方法上传。可是进了接口之后一直在控制台获取不到formdate的值包括formdate[0]的值也一样 接口应该是没有问题 因为用传统的表单submit提交也…

看雪CTF 2016_第八题分析

用exeinfo查看发现是x64程序&#xff0c;所以用平常的OD调试器是调试不到的&#xff0c;需要用x64的调试器 我这里是用x64dbug 这个调试器来进行调试分析 经过一步一步调试&#xff0c;发现程序调用RtlMoveMemory 这个api来进行获取我们输入的注册码 Rax的内存地址即为我们输入…

20169212 2016-2017-2 《网络攻防实践》第四周学习总结

20169212 2016-2017-2 《网络攻防实践》第四周学习总结 教材学习中的问题和解决过程 wireshark学习 主机&#xff1a;Kali ip&#xff1a;192.168.1.117 目标&#xff1a;www.bdwm.net 任务&#xff1a;捕获连接 www.bdwm.net的输入信息 利用wireshark可以清楚的看到发包的全过…

linux7挂载ntfs分区,刚安装centos7,请教大神如何挂载ntfs的分区

liangbenrang 于 2015-12-22 17:39:08发表:2、关于AS服务器Redhat5、6 CPU性能低问题&#xff0c;建议做如下调整&#xff1a;关于AS服务器Redhat5、6 CPU性能低问题&#xff0c;建议做如下调整&#xff1a;服务器BIOS设置(不同型号服务器设置方法不太一样)&#xff1a;cpu关闭…

UIViewController、UINavigationController与UITabBarController的整合使用

UINavigationController与UITabBarController是iOS开发中最常用的两种视图控制器&#xff0c;它们都属于UIViewController的子类&#xff0c;继承关系如下&#xff1a; interface UITabBarController : UIViewController <UITabBarDelegate, NSCoding> interface UINav…

小学生正确使用计算机,小学生做数学作业用计算器的做法正确吗?为什么?

用计算器做数学题是一种偷懒的做题方法&#xff0c;不知道现在的数学课本上还有没有计算机教学这一章节的内容&#xff0c;学习使用计算器也是学习内容之内的&#xff0c;但是计算器是用来解决那些较复杂的数字运算的&#xff0c;基本的四则运算还是不要用计算器&#xff0c;尽…

【php】 PHP 支持 9 种原始数据类型

PHP 支持 9 种原始数据类型。 四种标量类型&#xff1a; boolean&#xff08;布尔型&#xff09;integer&#xff08;整型&#xff09;float&#xff08;浮点型&#xff0c;也称作 double)string&#xff08;字符串&#xff09;三种复合类型&#xff1a; array&#xff08;数组…

linux安装vsftpt服务,centos安装vsftp服务.md

# 使用nginx和vsftp搭建图片服务器并使用Java上传图片到该图片服务器## 安装vsftp1、首先&#xff0c;安装vsftpdshellyum -y install vsftpd复制代码2、验证是否安装成功shellrpm -qa vsftpd复制代码3、查看vsftp相关配置文件shellll /etc/vsftpd/复制代码vsftpd.conf文件是主…

android support v4、v7、v13

android support v4、v7、v13的区别及作用和用法 1, Android Support V4, V7, V13是什么? 本质上就是三个java library。 2, 为什么要有support库? 如果在低版本Android平台上开发一个应用程序,而应用程序又想使用高版本才拥有的功能,就需要使用Support 3, 三个Support 库的…

SimpleInjector 简单使用

SimpleInjector 简单使用&#xff0c;未完待续转载于:https://www.cnblogs.com/aresyl/p/6627372.html

win设置计算机网络,Win10怎么修改网络类型,Win10网络类型怎么设置?

Win10怎么修改网络类型,Win10网络类型怎么设置?对某件事物越是了解的深入&#xff0c;越是能发现产品的猫腻!比如Win10!因为产品性能没升级多少&#xff0c;但是马甲换的却非常勤快!可能有些朋友会感觉&#xff0c;下面的内容似曾相识。下面的Win10怎么修改网络类型的内容&…

GIL+死锁与递归锁+信号量+event事件

GIL全局解释器锁: GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程 必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行 但是可以实现并发 在Cpython解释器下,如果想实现并行可以开…

编程之法----面试和算法心得

第1章 字符串 1.1 字符串的旋转 输入一个英文句子&#xff0c;翻转句子中单词的顺序。要求单词内字符的顺序不变&#xff0c;句子中单词以空格符隔开。为简单起见&#xff0c;标点符号和普通字母一样处理。例如&#xff1a;若输入“I am a student.”&#xff0c;则输出“stude…

ios 消息通知

苹果的通知分为本地通知和远程通知&#xff0c;这里主要说的是远程通知 历史介绍 iOS 3 - 引入推送通知UIApplication 的 registerForRemoteNotificationTypes 与 UIApplicationDelegate 的 application(_:didRegisterForRemoteNotificationsWithDeviceToken:)&#xff0c;appl…

aml linux 环境,各位辛苦编译DSDT.aml的兄弟,linux是个好工具啊,简单提取

本小菜先后安装雪豹和lion&#xff0c;驱动一直不能完美解决。本想靠dsdt和idsdt大法驱动我的G310M显卡&#xff0c;可是困难重重。小本bios为phoenix&#xff0c;而非各位大神提供的ami和aword板&#xff0c;编译错误达到201处&#xff0c;更改rtc处编译剩余7处错误&#xff0…

华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...

2019年华南理工大学网络教育计算机基础随堂练习第一章 (9页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;11.90 积分&#xfeff;第一章 计算机基础知识第一节 计算机的基本概念随堂练习提交截止时间…

AFN 切换BaseUrl

在某个特定的接口需要修改baseurl时&#xff1a; 直接使用kvc&#xff1a; [_sessionManager setValue:[NSURL URLWithString:NEW_BASE_URL] forKey:"baseURL"];在发出请求后&#xff0c;在修改会通用的baseurl 转载于:https://www.cnblogs.com/liuwenqiang/p/960667…