Java WEB —— XML
XML语言(可扩展标记语言W3C):描述一系列有关系的数据,允许自定义标签,它常用作软件配置文件,以描述程序模块之间的关系。
- XML语法:文档声明,元素,注释(DATA区,特殊字符,处理指令(processing instruction))
- 文档声明:声明文档的类型
- 例如:<?xml version="1.0"?> <?xml version = "1.0" encoding = "gb2312" ?>
- 乱码问题:XML文件写了encoding=utf-8,而文本文档默认系统的编码,即保存成了GB2312格式,则会出现乱码。
- 元素:XML文件中出现的标签
- 可以嵌套,但是不能交叉嵌套
- 可以带主体的标签<a>...</a>,也可以不带主体的<a />
- 必有且仅有一个根标签
- 标签中的换行和空格都是原始文件,不能格式混乱,即格式良好的方式在XML中要被迫改变。
- 标签规范:不能以数字和"_"开头,不能以xml(Xml或XML)开头,不能有空格,中间不含":"
- 属性:
- 属性值一定用"双引"或"单引"引起来
- 可以使用子标签,例如<input><name>...</name>
- 注释:<!-- -->声明之前不能有注释,不能有嵌套注释。
- CDATA区:内容解析引擎不会解析内容,原封不动输出。<用于程序>
- 文档声明:声明文档的类型
<![CDATA[内容]]> 例:<![CDATA[...<><>...]]>
- 转义字符:不要漏分号
& --> & < --> < > --> > " --> " ' -->'
- 处理指令(PI):处理指令用来指挥解析引擎如何解析XML文档内容。例:<?xml-stylesheet type="text/css" href="1.css" ?>声明语句也是处理指令。
- XML约束:框架的作者需要约束配置文件的编写格式
- DTD约束技术:Document Type Definition文档类型定义
<?xml version="1.0" ?> //XML文件
<!DOCTYPE 书架 SYSTEM "book.dtd"> <书架>
<书>
<书名>Java ...</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
...
</书>
</书架>
<!ELEMENT 书架 (书+> //+表示一本或多本
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
- DTD文件应使用UTF-8或Unicode编码,若不符合DTD规则,在浏览器下打开XML也能通过,所以应该使用Eclipse来校验。
- DTD约束有两种形式,可以写在xml中,也可以单独一个文件。
- XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件。
- <!DOCTYPE 文档根节点 SYSTEM "DTD文件的URL">引用的是本地文件。
- <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL"> 引用的是公共文件。例如:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems.Inc. //DTD ...." "http://java.sun.com/dtd/web_app_2_3.dtd">
- DTD约束语法细节:(元素定义,属性定义,实体定义)
- 元素定义:在DTD文档中使用ELEMENT声明一个XML元素,语法为<!ELEMENT 元素名称 元素类型>
- 元素类型可以是元素内容或类型,如<!ELEMENT 书架(书名,作者,售价)> 和 <!ELEMENT 书名 (#PCDATA)> --> 元素内容需要用()括起来。EMPTY->用于定义空元素,ANY为任意类型->元素类型可以直接写。
- 元素内容的组成关系:用逗号分隔,表示出现顺序要一致;用"|"分隔,表示任选其一,只能出现其中一个。元素内容可以出现"+",表示一次或多次,"?"表示0次或一次,"*"表示0次或多次。
- 属性定义:XML文档中的标签需要通过ATTLIST为其设置属性。
- 语法:
- 元素定义:在DTD文档中使用ELEMENT声明一个XML元素,语法为<!ELEMENT 元素名称 元素类型>
- DTD约束语法细节:(元素定义,属性定义,实体定义)
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
.......
>
如:
<!ATTLIST 商品
类别 CDATA(相当于String) #REQUIRED(必须设置的属性)
颜色 CDATA(相当于String) #IMPLIED(可选属性)
>
- 设置说明:#REQUIRED为必须设置该属性,#IMPLIED可以设置也可以不设置,#FIXED取值固定一个值,但是要提供这个值,并且直接使用默认值,可以默认也可以修改。例:
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者" //默认值可以不写
个人爱好 CDATA "上网" //默认值可以不写
>
- 属性值类型:CDATA --> 普通文本字符串 ENUMERATED --> 枚举(鸡肉|猪肉|牛肉) ID --> 标签的唯一标识,只能由字母开头,不能出现空格 ENTITY(实体) --> 创建一段内容的别名
- ENTITY定义语法:引用实体:<!ENTITY 实体名称 "实体内容">,以&实体名称; --> 实体内容方式在XML中引用。例如
- 属性值类型:CDATA --> 普通文本字符串 ENUMERATED --> 枚举(鸡肉|猪肉|牛肉) ID --> 标签的唯一标识,只能由字母开头,不能出现空格 ENTITY(实体) --> 创建一段内容的别名
<!ENTITY copyright "I am a programmer"> //在XML中使用©right;来引用
<!ENTITY %实体名称 "实体内容"> //以%实体名称; --> 实体内容方式引用
<!ENTITY %TAG_NAMES "姓名|E-MAILS|电话|地址">
<!ELEMENT 个人信息 (%TAG_NAMES;|生日)>
<!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>
- XML编程(CRUD 增删改查):
- XML解析方式:dom和sax
- DOM(document object model):一上来就直接将文档加载到内存中,将所有元素都变成对象。内存消耗较大,但是增删改查很容易。特点:标签,文本,属性皆是对象。
- SAX(simple API for XML) :SAX官方说明,如果增删改,请用DOM。不是官方标准,但广泛使用sax。特点:读一行解析一行,内存消耗小,不适合增删改查。
- XML解析开发包:Jaxp(sun),Jdom,dom4j。其中,dom4j最好用。
- Jaxp:是J2SE的一部分,由javax.xml,org.w3c.dom,org.xml.sax包及子包组成。在javax.xml.parsers包中,定义了几个工厂类,程序员调用工厂类可以得到xml文档的DOM解析器和SAX解析器,从而实现了XML的解析。
- 实现:DocumentBuilderFactory抽象类调用newInstance方法获取工厂对象,在调用对象中的parse方法,返回一个DOM的Document对象,在用Document对象,实现XML文档的增删改查。而XML文档的保存,则使用Transform类的transform方法来解决。
- 代码:
- Jaxp:是J2SE的一部分,由javax.xml,org.w3c.dom,org.xml.sax包及子包组成。在javax.xml.parsers包中,定义了几个工厂类,程序员调用工厂类可以得到xml文档的DOM解析器和SAX解析器,从而实现了XML的解析。
- XML解析方式:dom和sax
Document doc = builder.parse("src/book.xml");
NodeList list = doc. getElementByTagName("书名");
Node node = list.item(1);
String content = node.getTextContent();
增删改查都可以参照API,Document,Node,Element,transform等完成。
- Sax解析:采用事件处理的方式解析XML文件,涉及解析器和事件处理器
- 解析器可以使用Jaxp的API创建,创建出SAX解析器去解析某个XML文档。
- 解析器采用SAX方式解析某个XML文档时,只要解析到XML文档的组成部分,就会去调用时间处理器的方法,并把内容传给时间处理器(参数传递)。
- 通过事件处理器的参数,可以获得解析后的数据,从而决定后续的操作。(事件处理器由程序员编写)
- 流程:SAXPARSERFactory --> SaxParser --> SaxReader -->Content Handle(传入XML文档) --> 事件处理器。事件处理器的编写可以查看API,Content Handle可以利用DefaultHandler继承,并覆盖start,character,end方法即可。
- javabean封装xml文档数据:
- 先新建javabean类,再重写DefaultHandler的start,character,end方法,以标签为条件判断,存入List中。注意在标签结束时,应清空记录的标签,否则在标签结束时,跳入空行中间字段,抛出空指针异常。
- Dom4j解析:(Hibernate就是使用dom4j解析配置文件):
- 首先在Jre中导入dom4j的jar包<注意其文件中的jar包和支持jar包都要导入>。可以查看Dom4j的文档,可以快速了解dom4j的编程。
- 乱码问题:保存数据如果有乱码问题,可以初步判断是IO流的问题,使用OutputStream(File,charset)来选择合适的编码方式。而XMLWriter.write采用UTF-8的方式写XML文件,所以若需要写XML文件以GB2312方式,需要定义format输出器。建议用字节流,因为如果用字符流,是由字符流来查码表。若用字节流,则是由XMLWriter来查码表。
- 增删改查:
- <Create>得到Root节点,再一次往下找要增加标签的父标签,若要加入标签到序列中,需要得到父标签的子标签集合{List=element();},再调用List的add方法插入至指定位置。
- <Delete>从根节点向下,指到要删除的结点,再找到父标签,调用remove方法。
- <Update>从根节点向下找到目的节点,调用setText()方法。
- XPath:快速定位XML数据 <XPATH TUTORIAL>文档
- 语法:单斜杠:从根元素开始写;双斜杠:从绝对路径开始 //* //BBB[属性] --> 插文档
- 代码:
- Sax解析:采用事件处理的方式解析XML文件,涉及解析器和事件处理器
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("...."));
doc.selectSingleNode("//作者"); //获取单个结点
doc.selectNodes("..."); //获取所有结点
- 匹配用户名密码:
Node node = document.selectSingleNode("//user[@username='"+password+"' and @password='"+password+"']");
if(node == null){
system.out.println("用户名密码错误");
}else{
....
}
- Schema约束:
- 特性:
- Schema符合XML语法结构(用XML约束XML)。
- 可以使用Dom4j等解析Schema(因为Schema本身就是个XML)
- Schema独有命名空间。Schema比DTD支持更多的数据类型,约束功能更强。
- 不能定义实体,且比DTD复杂。已成为W3C标准。
- 后缀名.xsd,一个Schema文档通常称之为模式文档,遵循文档的XML文件称为实例文档。
- XML Schema必须有根节点,并且一定是Schema名称。
- 在编写Schema文档后,需要将文档中声明的元素绑定到URI上,即把XML Schema文档声明的元素绑定到一个命名空间上,以便以后解析引擎找到解析方法。
- 名称空间:在Schema中,每个约束模式文档都可以被赋予一个唯一的名称空间,在XML书写标签时,可以通过名称空间声明(xmlns)来表明当前编写的标签来自哪个Schema文档。
- 特性:
- Schema约束:
<itcast:书架 xmlns:itcast="http://www.itcast.cn">
<itcast:书>....</itcast>
</itcast:书架>
- 为了找到具体文件的位置,需指定SchemaLocation属性。例:
<itcast:书架 xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.itcast.cn book.xsd">
- 使用默认的名称空间:xmlns="URI"。例如:
<书架 xmlns="www.itcast.cn" > //指定了一个默认的名称空间
......
......
<书>....</书>
</书架>
- 使用名称空间引入多个XML Schema文档:多写一行xmlns,多谢一个SchemaLocation,可以使用两种约束文档。
- 不使用名称空间:<书架 xml:xsi=.... xsi:noNameSpaceSchemaLocation="xmlBook.xsd">
- Schema语法:查看w3c文档
Java WEB —— XML的更多相关文章
- java web.xml配置详解(转)
源出处:java web.xml配置详解 1.常规配置:每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参 ...
- Java web.xml 配置详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- java web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- Java web.xml笔记
Javaweb项目中, web.xml文件其中的各种设置, 就是简单的标注 <?xml version="1.0" encoding="UTF-8"?&g ...
- Java web.xml 配置技巧—动态欢迎页地址
我们的 Java Web 项目在配置web.xml 欢迎页地址默认是index.html .index.jsp ,不知道有人注意过没有,如果我要配置成/index/user.action 或者 ...
- Java - web.xml文件中可以配置哪些内容?
web.xml用于配置Web应用的相关信息,如:监听器(listener).过滤器(filter).Servlet.相关参数.会话超时时间.安全验证方式.错误页面等,下面是一些开发中常见的配置: ①配 ...
- JAVA Web.xml 加载顺序
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> ...
- Java web.xml加载顺序
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener&g ...
- JAVA web.xml中引用多个XML
web.xml里加<context-param><param-name>contextConfigLocation</param-name><param-va ...
随机推荐
- SQL SERVER 常用字符类型的区别
长度为 n 个字节的固定长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为 n 个字节.char 在 SQL-92 中的同义词为 character. ...
- 如何把双引号包含到echo命令的字符串中
初涉s h e l l的用户常常会遇到的一个问题就是如何把双引号包含到e c h o命令的字符串中.引号是一个特殊字符,所以必须要使用反斜杠\来使s h e l l忽略它的特殊含义.假设你希望使用e ...
- 38-语言入门-38-Coin Test
题目地址: http://acm.nyist.net/JudgeOnline/problem.php?pid=204 描述As is known to all,if you throw a co ...
- task判断任务是否存在
tasklist|find /i "qq.exe" ||exit taskkill /im qq.exe /f
- 【HDOJ】1362 The Bermuda Triangle
1. 题目描述给定几个三角形拼成一个百慕大三角形. 2. 基本思路基本思路肯定是搜索,关键点是剪枝.(1) 若存在长度为$l$的边,则一定可以拼成长度为$k \cdot l$的三角形,则可拼成长度为$ ...
- bigtint;int;smallint;tinyint
bigint对应的是Int64 [long] int对应的是Int32 [int] smallint对应的是Int16 [short] tinyint对应的是 [byte ...
- 转:Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了 ...
- website architecture
如果在不仔细考虑网站架构的情况下就去做一个网站,这就像在没有规划行程前而去贸然旅行.你可能最终到了你的目的终点,但是你可能也不知道在这过程中,你已经走过了多少的弯路.做网站适用同样的道理.在开工之前, ...
- iso中自动伸缩属性
一.自动伸缩属性 UIViewAutoresizingNone 不伸缩 UIViewAutoresizingFlexibleLeftMargin 跟父控件左边的距离 ...
- I.MX6 AT24Cxx eeprom Linux i2c-gpio
/************************************************************************** * I.MX6 AT24Cxx eeprom L ...