type
status
date
slug
summary
tags
category
icon
password
XML
简介
XML指可扩展标记语言,用来传输数据。
语法
- 所有XML元素都须有关闭标签(声明除外)
- XML标签对大小写敏感
- XML必须正确地嵌套
- XML文档必须有根元素
- XML的属性值须加引号
- 实体引用(用实体引用来代替字符)
实体引用 | 符号 | 说明 |
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
- XML中的注释
- 在XML中,空格会被保留(文档中的空格不会被删节)
元素
XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分,元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
<bookstore>和 <book>都拥有元素内容,因为它们包含了其他元素,<author> 只有文本内容,因为它仅包含文本,只有 <book>元素拥有属性(category="CHILDREN")。
XML元素命名规则
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符xml(或者XML、Xml)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
最佳命名习惯
- 使名称具有描述性。使用下划线的名称也很不错。
- 名称应当比较简短,比如<book_title>,而不是<the_title_of_the_book>。
- 避免-字符,如果按照这样的方式进行命名first-name,一些软件会认为需要提取第一个单词
- 避免.字符。如果按照这样的方式进行命名first.name,一些软件会认为name是对象first的属性
- 避免:字符,冒号会被转换为命名空间来使用
XML文档经常有一个对应的数据库,其中的字段会对应XML文档中的元素;有一个实用的经验,即使用数据库的名称规则来命名XML文档中的元素,非英语的字母比如éòá也是合法的XML元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。
属性
属性(Attribute)提供关于元素的额外(附加)信息,属性值必须被引号包围,不过单引号和双引号均可使用;如果属性值本身包含双引号,那么有必要使用单引号包围它(或者可以使用实体引用);尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。
验证
确定形式良好或结构良好的XML文档,形式良好(Well Formed)的XML文档会遵守前面介绍过的XML语法规则。
DTD
DOCTYPE声明是对外部DTD文件的引用。
Schema
- XML Schema是基于XML的DTD替代者
- XML Schema描述XML文档的结构
- XML Schema语言也称作XML Schema定义(XML Schema Definition,XSD)
解析
Java 方法
DTD 文件
XML 文件
导入文件
方法
读取节点
遍历读取节点
读取节点属性
向XML文件中增加节点
向XML指定位置增加节点
向节点增加属性
删除节点
CSS格式化XML布局
XML最大的特点就是可以很好地揭示数据的本身含义,因此使用XML文档来描述、存储和共享数据是具有很多优点的,但是XML文档中却并不包含数据的显示格式信息,这样就会造成数据显示时视觉上的混乱。
为了解决这一问题,就需要使用特定的样式表语言来对数据的显示加以描述,使用W3C提供的一种样式语言CSS(Cascading Style Sheets,层叠样式表,是目前格式化XML文档内容的方法之一)来格式化XML文档。
关键技术
主要应用CSS样式的字体属性、颜色和背景属性以及边框属性来实现。
字体属性
字体属性包括字体的颜色、字体大小、字体的风格等,常用的字体属性如表所示:
字体属性 | 说明 |
font | 设置或者检索对象中文特性的复合属性 |
font-family | 用于指定字体名称可以指定一个字体名,也可以用“,”分隔指定多个字体名 |
font-size | 设置字体的字号 |
font-variant | 设置英文大小写转换 |
font-weight | 设置字体的粗细 |
font-style | 用来指定是否对字体应用斜体风格 |
颜色和背景属性
CSS中的颜色属性用于设置页面元素的颜色,背景属性用于设置背景色或背景图像,具体属性及说明如表所示:
颜色和背景属性 | 说明 |
color | 设置页面的前景色 |
background-color | 设置背景色 |
background-image | 设置背景图像 |
bakground-repeat | 设置背景图像的排列方式。有4种,分别是repeat(在水平和垂直方向上都是以瓷砖形式反复显示)、repeat-x(只在水平方向重复显示)、repeat-y(只在垂直方向重复显示)、no-repeat(不重复,只显示一个) |
background-attachment | 设置背景图像是否固定,其值包括fixed(固定背景图像)和scroll(背景图像和其他内容一起滚动) |
background-position | 设置背景图像的显示位置 |
background | 综合设置背景图像的属性 |
边框属性
边框属性用于设置元素的边框宽度、样式和颜色,具体说明如表所示:
边框属性 | 说明 | 边框属性 | 说明 |
border | 边框复合属性 | border-right-color | 右边框颜色 |
border-top | 上边框 | border-bottom-color | 下边框颜色 |
border-left | 左边框 | border-top-style | 上边框样式 |
border-right | 右边框 | border-left-style | 左边框样式 |
border-bottom | 下边框 | border-right-style | 右边框样式 |
border-color | 边框颜色 | border-top-width | 上边框粗度 |
border-style | 边框样式 | border-left-width | 左边框粗度 |
border-width | 边框粗度 | border-right-width | 右边框粗度 |
border-top-color | 上边框颜色 | border-bottom-width | 下边框粗度 |
border-left-color | 左边框颜色 | ㅤ | ㅤ |
边框样式的属性值及说明如表所示:
边框样式属性值 | 说明 | 边框样式属性值 | 说明 |
none | 无边框 | double | 边框是双实线 |
hidder | 隐藏边框,IE不支持 | groove | 边框带有立体感的沟槽 |
dotted | 边框由点组成 | ridge | 边框呈脊形 |
dashed | 边框由短线组成 | inset | 边框内嵌一个立体边框 |
solid | 边框是实线 | outset | 边框外嵌一个立体边框 |
设计过程
CSS样式表
编写CSS样式表文件style.css,在该文件中指定XML文档中各元素的显示样式。
XML文件
编写index.xml文件,在该文件中创建一个books根元素,该元素由多个book元素组成。
XML 文件引用样式表
在index.xml文件的第2行加入如下引用CSS样式表文件的代码。
一个XML文档可能有多种风格样式,而且文档中的不同元素可能风格也不同。为了实现不同风格样式的切换,可以定义多个不同风格样式的CSS样式文件,在文档中需要使用时,直接通过<href>导入即可。
SAX
简介
在Java中,原生解析XML文档的方式有两种,分别是:Dom解析和Sax解析,Dom解析功能强大,可增删改查,操作时会将XML文档以文档对象的方式读取到内存中,因此适用于小文档;Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档。
SAX的优点
- 解析速度快
- 占用内存少
SAX的缺点
- 无法知道当前解析标签(节点)的上层标签,及其嵌套结构,仅仅知道当前解析的标签的名字和属性,要知道其他信息需要程序猿自己编码
- 只能读取XML,无法修改XML
- 无法随机访问某个标签(节点)
SAX 解析适用场合
- 对于CPU资源宝贵的设备,如Android等移动设备
- 对于只需从XML读取信息而无需修改XML
步骤
解析步骤很简单,可分为以下四个步骤:
- 得到XML文件对应的资源,可以是XML的输入流,文件和uri
- 得到SAX解析工厂(SAXParserFactory)
- 由解析工厂生产一个SAX解析器(SAXParser)
- 传入输入流和handler给解析器,调用parse()解析
Sax采用事件驱动的方式解析文档,简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取);在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些信息;同样,在Sax的解析过程中,读取到文档开头、结尾,元素的开头和结尾都会触发一些回调方法,可以在这些回调方法中进行相应事件处理。
这四个方法是:startDocument()、endDocument()、startElement()、endElement()。
此外,光读取到节点处是不够的,还需要characters()方法来仔细处理元素内包含的内容;将这些回调方法集合起来,便形成了一个类,这个类也就是需要的触发器;一般从main方法中读取文档,却在触发器中处理文档,这就是所谓的事件驱动解析方法。
如上图,在触发器中,首先开始读取文档,然后开始逐个解析元素,每个元素中的内容会返回到characters()方法,接着结束元素读取,所有元素读取完后,结束文档解析。
方法
- startDocument():文档解析开始时调用,该方法只会调用一次
- startElement(String uri, String localName, String qName, Attributes attributes):标签(节点)解析开始时调用
- uri:XML文档的命名空间
- localName:标签的名字
- qName:带命名空间的标签的名字
- attributes:标签的属性集
- characters(char[] ch, int start, int length):解析标签的内容的时候调用
- ch:当前读取到的TextNode(文本节点)的字节数组
- start:字节开始的位置,为0则读取全部
- length:当前TextNode的长度
- endElement(String uri, String localName, String qName):标签(节点)解析结束后调用
- endDocument():文档解析结束后调用,该方法只会调用一次
实例
XML文件
实体类
方法
Properties
简介
Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件;它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存。
实例
properties文件
方法
- 作者:青山🌊
- 链接:http://cxuan.me/article/java-ee-xml-properties
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。