java第17天

第1章 XML

1.1 概述

XML(EXtensible Markup Language)可扩展的标记语言。主要用于数据交换。在HTML发展过程中,由于游览器厂商的恶性竞争,都在兼容不规范的写法,以用来吸引开发者。这与W3C的初衷相违背。于是W3C制定了XML标准,想以此替代HTML进行数据展示。但此并不能吸引开发者,XML最终以失败告终。XML接着又向数据交互方向寻求生存之路,并在此取得一定的成功。现主要功能用于配置文件跟网络中进行数据交互。

1.2 XML与HTML的区别

  • XML标签都是自定义的,HTML标签都是预定义的
  • XML的语法严格,HTML语法松散
  • XML存储数据的,HTML展示数据的

1.3 语法规则

  • XML文件的后缀必须都是xml
  • XML第一行必须写文档声明
  • XML中有且仅有一个根标签
  • 属性值必须使用引号,单引号、双引号都可以
  • 标签必须正确关闭,要么成对标签,要么自闭合
  • XML区分大小写

1.4 XML组成

1.4.1 文档声明
  • 格式:<?xml 属性列表 ?>

  • 属性列表

    属性 含义
    version 版本号,必须属性
    encoding 编码方式,告知解析引擎当前文档使用的字符集,默认ISO-8859-1
    standalone 是否独立,取值yes表示不依赖其它文件,取值no表示依赖其它文件
  • 栗子

    <?xml version="1.0" encoding="UTF-8"?>
    
1.4.2 指令(了解)

xml中还可以定义指令(CSS),毕竟发明xml的初衷还是做数据展示的。了解即可。

  • demo.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <?xml-stylesheet  type="text/css" href="test.css"  ?>
    <users>
    	<user>
    		<name>张三</name>
    		<age>18</age>
    		<sex></sex>
    	</user>
    
    	<user>
    		<name>李四</name>
    		<age>28</age>
    		<sex></sex>
    	</user>
    
    </users>
    
  • test.css

    @CHARSET "UTF-8";
    name{
         
    	color:red;
    }
    
1.4.3 标签

xml中还可以自定义标签,有如下规则:

  • 名称可以包含字母,数字以及其它字符
  • 不能以数字或者标点符号开头
  • 名称不能以xml或者XML、Xml等等开始
  • 名称不能包含空格
1.4.4 属性

标签内还可以定义属性,主要以K-V对的形式,属性值必须使用引号,单引号、双引号都行。id属性值唯一。

1.4.5 文本
  • 标签对中还可以定义文本内容。文本中如果用到需要转义的字符则需要转义,比如:&lt; (<)` 、&amp;(&)&gt;(>)

  • CDATA区中的文本会原样输出,特殊字符不需要转义。<![CDATA[ ]]>

    	<code>
    		<![CDATA[
    				if(a>1 && a<3){
    					
    				}
    		]]>
    	</code>
    
1.4.6 注释

xml中的注释同HTML,<!-- -->

1.5 约束

XML中主要是做数据交互的,那么我们可以通过规则对这些数据进行约束。

1.5.1 分类

XML的约束主要分为dtd跟schema两种。dtd是一种简单的约束技术,已经过时。schema是一种复杂的约束技术,功能更加强大。

1.5.2 DTD的使用
外部DTD

将DTD的约束规则定义在外部的dtd文件中。根据外部的dtd文件的位置又有本地DTD跟网络DTD之分。

  • 本地DTD<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置" >

    • student.xml
    <?xml version="1.0" encoding="UTF-8"    ?>
    <!DOCTYPE students SYSTEM "student.dtd">  <!-- 外部引入dtd    -->
    <students>
    	<student number="1">
    		<name>six</name>
    		<age>16</age>
    		<sex>girl</sex>
    	</student>
    	
    	<student number="2">
    		<name>seven</name>
    		<age>23</age>
    		<sex>boy</sex>
    	</student>
     
    </students>
    
    • student.dtd
    <!-- 定义可以有标签students,可以有student子标签,*表示数量为0-N,  +表示1-N -->
    <!ELEMENT students (student+) >
    <!-- 定义有标签student,可以有name,age,sex子标签,需要满足顺序 -->
    <!ELEMENT student (name,age,sex) >
    <!-- 定义可以有标签name,类型为字符串-->
    <!ELEMENT name (#PCDATA) >
    <!-- 定义可以有标签age,类型为字符串-->
    <!ELEMENT age (#PCDATA) >
    <!-- 定义可以有标签sex,类型为字符串-->
    <!ELEMENT sex (#PCDATA) >
    <!-- 定义student标签可以有属性number,必填项-->
    <!ATTLIST student number ID #REQUIRED >
    
  • 网络DTD <!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的位置URL" >

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    
内部DTD

DTD的约束还可以直接定义在xml文件中。<!DOCTYPE students [ ]>

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

<!-- 内部dtd -->
<!DOCTYPE students [
<!ELEMENT students (student+) >
<!ELEMENT student (name,age,sex) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT sex (#PCDATA) >
<!ATTLIST student number ID #REQUIRED >
]>

<students>
	<student number="1">
		<name>six</name>
		<age>16</age>
		<sex>girl</sex>
	</student>
	
	<student number="2">
		<name>seven</name>
		<age>23</age>
		<sex>boy</sex>
	</student> 

</students>

1.5.3 schema

由于DTD不能对数据内容进行约束,我们可以使用另一种功能更加强大的技术:schema。

schema的导入

我们先看一个简单的使用schema的规则(student.xml)

<?xml version="1.0" encoding="UTF-8"?>
 <a:students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xmlns:a="http://www.blb.com/xml"
			xsi:schemaLocation="http://www.blb.com/xml student.xsd"

>
	<a:student number="blb_0001">
		<a:name>six</a:name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值