Lazy loaded image
学习思考
Lazy loaded imageJavaEE——XML与Properties
字数 4484阅读时长 12 分钟
2025-3-1
2025-3-22
type
status
date
slug
summary
tags
category
icon
password

XML

简介

XML指可扩展标记语言,用来传输数据。

语法

  1. 所有XML元素都须有关闭标签(声明除外)
  1. XML标签对大小写敏感
  1. XML必须正确地嵌套
    1. XML文档必须有根元素
    1. XML的属性值须加引号
    1. 实体引用(用实体引用来代替字符)
      1. 实体引用
        符号
        说明
        <
        <
        小于
        >
        >
        大于
        &
        &
        和号
        '
        '
        单引号
        "
        "
        引号
    1. XML中的注释
      1. 在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 解析适用场合

      1. 对于CPU资源宝贵的设备,如Android等移动设备
      1. 对于只需从XML读取信息而无需修改XML

      步骤

      解析步骤很简单,可分为以下四个步骤:
      1. 得到XML文件对应的资源,可以是XML的输入流,文件和uri
      1. 得到SAX解析工厂(SAXParserFactory)
      1. 由解析工厂生产一个SAX解析器(SAXParser)
      1. 传入输入流和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文件

      方法

       
      上一篇
      JavaSE——JDBC与网络编程
      下一篇
      JavaEE——域对象

      评论
      Loading...