xml的应用与dtd约束
1.xml的应用
*不同的系统之间的传输数据(qq消息传输)
*用来表示生活中有关系的数据(省市区的包含关系)
*经常用在文件配置
**比如现在连接数据库,肯定知道数据库的名称和密码及用户名。
**如果修改数据库信息,则无需修改源代码,只需修改配置信息即可。
2.xml的申明
<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<a>a<b</a>
<b>a>b</b>
<c>"a<b"</c>
<b>'a>b'</b>
</person>
注:<?xml version="1.0"encoding="utf-8"?>必须要放在文件的首行,而且xml后必须要有一个空格,encoding前面也必须要有一个空格。
标签的开始必须要有结束,规范性的。
一个xml文件有且仅有一个根标签,其他的标签都是它的子标签。
在xml文件中会把空格和换行也当作内容来处理。
xml文件是区分大小写的。标签不能以数字和下划线开头。
xml标签中不能包含空格和冒号,不能以xml开头,标签可以是中文。
对于大于小于号,双引号,单引号等特殊字符需要进行转义。但可以用CDATA区进行处理。
写法:<![CDATA[ 内容 ]]>
<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<![CDATA[<a>a<b</a>
<b>a>b</b>
<c>"a<b"</c><d>'a>b'</d> ]]>
</person>
*PI指令用于指示显示的样式,用于引入css文件,但几乎用不到。xml一般用于保存数据,PI指令只对英文起作用,对中文标签不起作用。
3.xml约束
<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<![CDATA[<a>a<b</a>
<b>a>b</b>
<c>"a<b"</c><d>'a>b'</d> ]]>
<猫>100</猫>
</person>
*人不可能拥有猫这个属性,但这样写任然符合语法,所以可以运行,so需要一些规则来约束。
xml的约束:dtd约束 schema约束
<?xml version="1.0" encoding="utf-8"?>
<!--引入外部dtd文件<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
<!DOCTYPE person SYSTEM "test.dtd">
-->
<!--内部dtd文件 <!DOCTYPE 根元素名称[内容]>-->
<!DOCTYPE person[
<!--<!ELEMENT person (name+,age,sex,school,面积)>--> //+ 表示可以含有1到多个同样的实体
<!ELEMENT person (name|age|sex|school|面积)> // | 表示枚举,只能含列举出的标签中的任意一个
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex EMPTY> //EMPTY表示此标签内必须为空
<!ELEMENT school ANY>
<!ELEMENT 面积 ANY> //ANY表示标签内可以任意
]>
//(#PCDATA)之前必须要有空格。
<!-- 使用外部网络上的dtd文件(struts.xml框架)
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<!DOCTYPE 根元素名称 PUBLIC "DTD名称""DTD文档的URL">
-->
<person>
<name>baojuan</name>
<!--<age>20</age>
<sex></sex>
<school>4555</school>
<面积>dhhahs</面积>-->
</person>
4.xml的解析 (dom解析技术和sax解析技术)
**根据xml的层级结构在内存中分配一个树形结构,把xml的标签属性文本都封装成对象,使用dom来解析时,如果文件过大,会造成内存溢出。
优点:很方便实行增删改操作。
**使用sax解析时,采用事件驱动,边都变解析。从上到下依次解析,没遇到一个对象,就把对象名称返回,不会造成内存溢出,可以实现查询,但不能进行增删改操作。
想要解析xml,首先需要解析器,不同的公司提供了不同的解析器,通过api方式提供。
sun公司提供了jaxp解析器,dom4j组织提供了dom4j解析器(*****实际开发中常用*******),jdom组织提供了jdom解析器。
**jaxp解析器在jdk的javax.xml.parsers包里面
四个类:针对dom和sax解析的四个类
dom:documentBuilder:解析器类
* 这个类是一个抽象类,不能new,只能使用DocumentBuilderFactory.newDocumentBuilder()
方法获取。
* 一个方法,可以解析xml,parse("xml路径"),返回doucument整个文档。
* 返回的document是一个接口,父节点是node,如果在document里找不到想要的方法,就要去node里去找。
* 在document里,有一个方法,getElementsByTagName(String tagname)返回的是一个nodeList数组,可以得到标签数组。
* createElement(String tagName)方法创建一个标签。
* createTextNode(String data)
方法创建一个文本。
* appendChild(Node newChild)
node接口中的方法,将文本添加到标签下面。
* removeChild(Node oldChild)删除节点,但要经过父节点来删。
* getParentNode()
获取父节点
* NodeList list
getLength() //得到集合的长度
item(int index) //根据下标取到具体的值
for(int i=0;i<list.getLength();i++){
list.item(i);
}
documentBuilderFactory:解析器工厂
这个类是一个抽象类,不能new,只能通过newInstance()来获得documentBuilderFactory的对象实例。
sax:SAXParser:解析器类
SAXParserFactory:解析器工厂
xml的应用与dtd约束的更多相关文章
- 【代码笔记】XML深入学习:DTD约束与DTD语法(1)
2015-12-27 文件名 student.xml <?xml version="1.0" encoding="GB2312" standalon ...
- 【代码笔记】XML深入学习:DTD约束与DTD语法(2)
DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...
- Struts2配置dtd约束
Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包 apps/struts2-blank.war解压 2.在web.xml文件中配 ...
- 【JAVA与XML、dtd约束、Schema约束】
一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
- xml技术DTD约束定义
XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...
- XML的DTD约束
DTD约束:DTD的声明和引用 1.内部DTD文档 <!DOCTYPE 根元素 [定义内容]> 2.外部DTD文档 <!DOCTYPE 根元素 SYSTEM "DTD文件路 ...
- XML DTD约束 对xml文件的crud的查询Read Retrieve操作 xml递归遍历
本地的dtd文档 xml中引入dtd文档 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书 ...
随机推荐
- 在Java中VO , PO , BO , QO, DAO ,POJO是什么意思
在Java中VO , PO , BO, DAO ,POJO是什么意思 最近在项目中,遇到VO,我的天...那就一起学习回忆一下 首先简单说明下: O/R Mapping是Object Relatio ...
- 在C#.net中如何操作XML
在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...
- Sql 本周当天本期日期转换
--查询当天: --查询24小时内的: --info为表名,datetime为数据库中的字段值 --查询当天: --查询24小时内的: select * from table where DateDi ...
- WPF的组成架构
Windows呈现基础(Windows Presentation foundation,WPF)是微软新一代图形系统,运行,NET Framework3.0架构下,为用户界面.2D/3D图形.文档和媒 ...
- 封装WebService的APM为Async、Await模式利于Asp.Net页面调用
Wcf针对Async.Await指令直接可以返回Task<T>结果,但是老旧的系统中还是会有很多是在用Soap的Webservice.直接在Asp.Net页面调用APM方法确实比较麻烦,其 ...
- 微信小程序入门开发文档
第一步:下载微信小程序开发者工具并安装,下载路径: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html 进到下载界面后,根 ...
- windows远程连接Mac、Mac远程连接Mac、Mac连接Windows
最近因为要进行学习交流,需要用到远程连接,所以找了三种不同的方式,记录如下 1.Windows远程连接Mac 1.mac os x电脑设置 系统偏好设置-共享-勾选“远端管理”,然后在电脑设置—VNC ...
- Linux 学习 三, linux 文件结构
linux 的文件结构 linux 下的bin 目录,包含了常用的命令应用程序 /bin: bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.dmesg.gzip.kill.l ...
- Android - 页面返回上一页面的三种方式
今年刚刚跳槽到了新公司,也开始转型做Android,由此开始Android的学习历程. 最近在解很多UI的bug,在解bug过程中,总结了在UI的实现过程中,页面返回上一页面的几种实现方式. 一. 自 ...
- dedecms网站扩展手机网站—共用数据库真正做到电脑手机同步访问,原pc站无需改动,对原pc站无任何影响
在如今无线互联网大潮的冲击下,越来越多的pc网站访问量下降,首当其冲的就是以pc网站为生的站长们,为了顺应无线互联网的要求,站长们很有必要为自己的pc网站扩展一套手机网站,更早的抓住手机用户的流量,使 ...