XML学习笔记

1.XML文档概述

XML(可扩展标记语言 (Extensible Markup Language, XML) )是树状结构的,是一种通用的数据交换格式。

一个XML文档就像数据库中一个表 ,具有三个要素:文档结构、文档数据、文档样式

2.什么是配置文件

配置文件就是记录应用程序的配置信息的文件。

传统配置文件的格式:

#Db.Properties

DBServer=192.168.0.100

Database=emp

Port=1443

Username=zxx

Password=123

 

Properties类:

publicclass ConfigLoader {

      publicstaticvoid main(String[]args) throws Exception {

           Properties properties = new Properties();

      /*

       * 总结:通过类加载器加载配置文件的时候不要加/,因为类加载器会直接到classpath的根目录下找指定的名称的文件。

       * 通过Class对象加载配置文件的时候要加/

       */

           //写绝对路径

//        properties.load(newFileInputStream("D:\\Java_Develop\\My_Projects\\MDay2\\src\\db.properties"));

          

           //得到类加载器

           //如果配置文件是在src的根目录下,写上配置文件的名字,不能加/

      properties.load(ConfigLoader.class.getClassLoader().getResourceAsStream("db.properties"));//配置文件不在包下

           //如果配置文件是在src的根目录下,写上配置文件的名字,要加/

      properties.load(ConfigLoader.class.getResourceAsStream("/db.properties")); //配置文件不在包下

           //如果配置文件是在某个包下,则要写上具体的路径,但路径前面不能加/

//         properties.load(ConfigLoader.class.getClassLoader().getResourceAsStream("cn/itcast/gz/config/db.properties"));//配置文件在包下

           //如果配置文件是在某个包下,通过这种方式加载时,简写时前面不能加/

//        properties.load(ConfigLoader.class.getResourceAsStream("/cn/itcast/gz/config/db.properties"));//配置文件在包下

//        properties.load(ConfigLoader.class.getResourceAsStream("config/db.properties"));//配置文件在包下

           System.out.println(properties);

      }

}

3. XML的基本语法

文档声明

元素定义

属性定义

注释

空格和换行的处理

CDATA区

特殊字符

处理指令(processing instruction)

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

<!--vsersion:xml文档的版本号,目前为1.0

encoding:xml文档内容的编码(Xml内容有编码,文件自身也有编码。

推荐文件内容和自身的编码都用utf-8)

standalone:说明文档是否独立

申明的位置不能换,先版本再编码-->

<!-- 文档申明引用的是那个dtd文件来校验 -->

<!DOCTYPE unspecified PUBLIC "//UNKNOWN/""unknown.dtd">

<persons>

      <person id="0001">

           <name>张三</name>

           <age>23</age>

           <sex></sex>

           <intro>

           <!-- CDATA区用<![CDATA[内容]]>来表示,里面的内容被看作普通字符解析 -->

                 <![CDATA[大家好<!>,我是张三!]]>

           </intro>

      </person>

</persons>

4. XML的约束模式语言

先后出现的XML约束模式语言有XML DTD、XDR、SOX、XML Schema等等,其中应用最广泛和具有代表意义的是XML DTDXML Schema。( 约束模式其实是一种语言。)

4.1 DTD(Document Type Definition)

1)创建dtd文件

DTD文件应该使用UTF-8或Unicode编码。

一个元素的各个组成成份之间可以有各种关系:

   <!ELEMENT MYFILE (TITLE AUTHOR EMAIL)>这种是错的,无法表示无序,只穷举

       <!ELEMENT MYFILE(TITLE,AUTHOR,EMAIL)>:顺序关系

       <!ELEMENT MYFILE(TITLE|AUTHOR|EMAIL)>:互斥关系

在元素的使用规则中可以定义子元素出现的次数:

       (书+)>=1、 (书?)0||1、 (书*)>=0、 (书)=1

一对圆括号( )可用于将括在其中的内容组合成一个可统一操作的分组,分组中可以嵌套更小的分组。

       <!ELEMENTMYFILE((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

#REQUIRED:该属性必须存在

 #IMPLIED:属性不是必需的

 #FIXED value:属性值是固定的,直接使用默认值 

在使用()分组时,必须遵循以下规范:

a#PCDATA关键字必须是圆括号中的第一项;

b、在圆括号中可以使用短竖线,但不能使用逗号、问号或加号;

c、在圆括号中虽然使用了短竖线,但并不表明各个并列项之间存在互斥关系;

d、在分组之后必须包含*号,声明0个或多个
<!ENTITY % version '(DOTA_ALLSTARS_v6.69|DOTA_ALLSTARS_v6.69B)'>

<!--+说明可以有1个或多个hero元素,定义元素用ELEMENT-->

<!ELEMENT dota (hero+)>

<!--括号的内容说明,hero元素下有三个元素,且顺序是按照定义的顺序-->

<!ELEMENT hero (strength,agility,intelligence)>

<!--定义元素中的属性用ATTLIST,#REQUIRED表示该属性是必须的,  #IMPLIED表示该属性是可选的-->

<!ATTLIST hero version%version; #REQUIRED>

<!ATTLIST hero name CDATA #IMPLIED>

<!--(54|34)表示该属性的值只能是其中一个 -->

<!ATTLIST hero age (54|34) #REQUIRED>

<!--ID表示该属性是ID类型的,与属性名字无关-->

<!ATTLIST hero id ID #REQUIRED>

<!ELEMENT name (#PCDATA)>

<!ELEMENT strength (#PCDATA)>

<!ELEMENT agility (#PCDATA)>

<!ELEMENT intelligence (#PCDATA)>

 

2)引入dtd文件

一个xml只能引入一个dtd对其进行约束。

在xml文件中引入dtd文件语法如下:

XML文档通过使用 DOCTYPE 声明语句(文档类型定义语句)来指明它所遵循的DTD文件,DOCTYPE 声明语句紧跟在XML文档声明语句后面,有两种格式:

       (1)<!DOCTYPE 文档类型名称[xml的根标签] SYSTEM "DTD文件的URL">

       (2)<!DOCTYPE 文档类型名称[xml的根标签] PUBLIC "DTD名称" "DTD文件的URL">

例如:

       (1)<!DOCTYPE dota SYSTEM "heros.dtd">

       (2)<!DOCTYPE web-app PUBLIC

              "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"

              "http://java.sun.com/dtd/web-app_2_3.dtd">

扩展:DTD标识名称应符合一些标准的规定,对于ISO标准的DTD以 ISO 三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。

4.2 XML Schema

DTD的缺陷:

1,DTD本身不是一个xml,不能被直接校验

2,不能表示数据类型

3,无法有效处理重名的元素

4,无法定义更多的元素规则

5,无法使用多个DTD文件一起验证

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

创建xml schema文件:

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

<!--

targetNamespace: 当前Schema中定义的元素都定义在这个名称空间中

xmlns:tns  : 给当前名称空间起了一个别名

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

xml:ns: 指定当前schema中使用的元素都来自于http://www.w3.org/2001/XMLSchema里面定义的元素

 -->

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

      targetNamespace="http://gz.itcast.xml/heros"

      xmlns:tns="http://gz.itcast.xml/heros"

      elementFormDefault="qualified">

      <element name="dota"type="tns:dota"></element>

      <complexType name="dota">

           <sequence maxOccurs="unbounded">

                 <element name="hero"type="tns:hero" />

           </sequence>

      </complexType>

      <complexType name="hero">

           <sequence>

                 <element name="strength"type="string" />

                 <element name="agility"type="string" />

                 <element name="intelligence"type="string" />

                 <any></any>

           </sequence>

           <attribute name="name"type="string" use="required"/>

      </complexType>

</schema>

使用xml schema文件约束xml文档:

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

<!--

1.xmlns: 当前xml中的元素来自于http://gz.itcast.xml/heros命名空间

2.xsi:schemaLocation指定该http://gz.itcast.xml/heros名称空间所对应的schema文件。

3.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 任意的xml schema约束的xml文件中都有的这句话。

 -->

<dota xmlns="http://gz.itcast.xml/heros" 

        xmlns:sn="http://gz.itcast.xml/heros1"  //红色为前缀名

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

      xsi:schemaLocation="http://gz.itcast.xml/herosheros.xsd

      http://gz.itcast.xml/heros1  heros2.xsd">

      <hero name="Sven">

           <strength>23+2.7</strength>

           <agility>21+2</agility>

           <intelligence>14+1.3</intelligence>

           <sn:hero>xcxx</sn:hero>//红色为前缀名

      </hero>

</dota>

5.XML编程

XML解析方式分为两种:dom和sax

dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。

sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。

 

参见:

Java 解析xml文档笔记(SAX,DOM,DOM4J)

Java创建xml文档笔记(DOM,DOM4J)

 

6.附录

1)如何在xml中引入外部的dtd, dtd上面的声明都是指向网络上面dtd文件的地址,因为我们不能够上网,无法让eclipse帮我从网络上面下载dtd,所以需要将网络地址映射到本地dtd地址上面从而对xml进行验证。

 

2)如何映射

 2.1 在抒写xml之前要把dtd文件中的xml生命拷贝到当前xml中         

<!DOCTYPEhibernate-configuration PUBLIC

       "-//Hibernate/HibernateConfiguration DTD 3.0//EN"   dtdID

       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">网络地址

2.2 在eclipse中

      a.通过网络地址映射本地dtd

         window---preferences---xml---xmlCatalog--Add

         Location中填写本地dtd文件的地址

         KeyType中选择URI

         key中填写网络dtd的地址

        

  

     b.通过xml声明中dtd的id

         window---preferences---xml---xmlCatalog--Add

         Location中填写本地dtd文件的地址

         Key Type中选择Public ID

         key中填写dtd的Id

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值