J2EE进阶之XML DTD约束和JAXP的DOM解析 六
2017-07-17 15:09
281 查看
XML DTD约束和JAXP解析
XML的简介
* 可扩展的标记语言 * 标签是自定义的 * 和HTML类似 * XML是用来传输数据,不是显示数据 * XML的版本: * XML1.0(使用) XML1.1(不向下兼容) * XML的常见应用 * 作为框架的配置文件 * 系统与系统之间进行数据的传输 * json * webservice soap XML
XML的语法
* 文档声明 * <?xml version="1.0" ?> * 出现在文档的第一行第一列的位置 * 属性: * version = "1.0" xml的版本 必须要写的 * encoding="UTF-8" XML的编码集 可选的 * standalone="yes/no" 代表xml文件是否是独立的 如果是no,不独立,引入外部的文件。(如果不写,没有问题) 可选的 * 乱码 * 产生的原因:保存文件时和打开文件时采用的编码不一致。 * 解决办法:保证保存文件和打开文件编码一致即可。 * 元素(标签) * 分为开始和结合标签 * 包含标签主体 <abc>文本内容</abc> * 不包含标签主体 <abc/> * 不能交叉嵌套 * 只能有一个根节点 * 命名规范 * 区分大小写 错误的:<a></A> * 不能以数字和中划线开头 错误的:<1a> <-a> * 不能以(XML xml Xml) 开头 * 元素中不能包含空格和冒号 * 属性 * XML使用双引号或者单引号 * 属性不能重复 * 命名规范和元素相同 * 注释 * 和HTML的注释相同的 * <!-- XML的注释 --> * 不能嵌套 * 特殊字符 * < < * & & * > > * " " * ' ' * CDATA区 * 作用:把中间内容当前普通文本内容 * 语法: <![CDATA[ 文本内容 ]]> * PI(处理指令)(了解)
XML的约束
* 为什么是约束: <myspring> <bean>cn.itcast.login</bean> </myspring> * 两个概念 * 格式良好的XML * 有效的XML
DTD
* 快速入门步骤 * 定义元素 * <!ELEMENT 元素名称 元素类型(后指定) > * 判断元素是复杂还是简单元素 * 如果是简单元素 元素类型(#PCDATA) * 如果是复杂元素 元素类型(子元素名称) * 引入XML的文件中 * <!DOCTYPE 根节点 SYSTEM "DTD的地址" >
demo1
DTD代码:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!ELEMENT 书架 (书)> 3 <!ELEMENT 书 (书名,作者,售价,简介)> 4 <!ELEMENT 书名 (#PCDATA)> 5 <!ELEMENT 作者 (#PCDATA)> 6 <!ELEMENT 售价 (#PCDATA)> 7 <!ELEMENT 简介 (#PCDATA)>
xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE 书架 SYSTEM "book.dtd"> 3 4 <书架> 5 <书> 6 <书名>javaweb开发大全</书名> 7 <作者>hah</作者> 8 <售价>99.8元</售价> 9 <简介>这书不错啊</简介> 10 </书> 11 </书架>
DTD文件与XML文件的关联方式
* 可以在XML的文件的内部编写DTD的代码 * 格式: <!DOCTYPE 根节点 [ DTD的代码 ]> * 引入本地DTD的文件(经常使用) * 格式 <!DOCTYPE 根节点 SYSTEM "DTD文件的地址"> * 引入网络的DTD的文件(不常使用) * <!DOCTYPE 根节点 PUBLIC "DTD文件的名称" "DTD文件的地址">
demo2 为第二种引入方式
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE 书架 [ 3 <!ELEMENT 书架 (书)> 4 <!ELEMENT 书 (书名,作者,售价,简介)> 5 <!ELEMENT 书名 (#PCDATA)> 6 <!ELEMENT 作者 (#PCDATA)> 7 <!ELEMENT 售价 (#PCDATA)> 8 <!ELEMENT 简介 (#PCDATA)> 9 10 11 ]> 12 13 <书架> 14 <书> 15 <书名>javaweb开发大全</书名> 16 <作者>hah</作者> 17 <售价>99.8元</售价> 18 <简介>这书不错啊</简介> 19 </书> 20 21 </书架>
DTD的语法
元素定义
* <!ELEMENT 元素名称 元素类型> * 元素类型 * (#PCDATA) 可解析的字符数据(字符串) * EMPTY 空的 * ANY 任意的 * (子节点名称) 子节点 * 子元素 * 子元素直接的关系 * , 子元素是按顺序出现 * | 是或的关系 * 子元素出现的次数 * + 子元素出现1次或多次 * * 子元素出现0次或多次 * ? 子元素出现0次或1次 <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
属性定义(AttributeList)
* <!ATTLIST 元素名称 属性名称 属性类型 属性约束 属性名称 属性类型 属性约束 > * 属性类型 * CDATA 字符串 * 枚举 写法:(值1|值2) * ID 代表唯一的值,不能重复,不能只写数字 * 属性约束 * #REQUIRED 必须出现的 * #IMPLIED 属性是可选的 * #FIXED 固定值 (#FIXED "值") * 默认值(不常用)
demo
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE 书架 [ 3 <!ELEMENT 书架 (书+)> 4 <!ELEMENT 书 (书名,作者,售价,简介)> 5 <!ELEMENT 书名 (#PCDATA)> 6 <!ELEMENT 作者 (#PCDATA)> 7 <!ELEMENT 售价 (#PCDATA)> 8 <!ELEMENT 简介 (#PCDATA)> 9 10 <!ATTLIST 书 11 出版社 CDATA #FIXED "北大出版社" 12 出版日期 (2014-11-7|2014-11-5) #REQUIRED 13 编号 ID #REQUIRED 14 > 15 16 <!ENTITY username "张三"> 17 18 ]> 19 20 <书架> 21 <书 编号="b" 出版日期="2014-11-5"> 22 <书名>javaweb开发大全</书名> 23 <作者>&username;</作者> 24 <售价>99.8元</售价> 25 <简介>这书不错啊</简介> 26 </书> 27 <书 编号="b2" 出版社="北大出版社" 出版日期="2014-11-7"> 28 <书名>葵花宝典</书名> 29 <作者>越不群</作者> 30 <售价>99.8两</售价> 31 <简介>欲练此功...</简介> 32 </书> 33 </书架>
实体定义(用的比较少)
* <!ENTITY 别名 "值"> * 引入该实体 &别名; * schema * 区别:
XML的解析
* 解析XML的技术有哪些? * 解析XML的技术有很多,主要使用DOM和SAX两种技术? * DOM和SAX的区别: * DOM解析XML会在加载整个文档到内存中,形成树状结构。 * 缺点:如果文档过大,容易产生内存溢出的问题。 * 优点:可以做增删改的操作 * SAX解析是基于事件驱动和事件处理器的,边读边解析。 * 优点:不会产生内存溢出的问题。 * 缺点:不能做增删改的操作(但是如果使用DOM4J可以做该操作) * 几种提供解析XML的jar包 * JAXP SUN提供的 (标准) * DOM4J DOM4J提供的 (企业应用最多) * JDOM JDOM提供的 (不讲)
JAXP的DOM解析demo
xml 文件:
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <书架> 3 <书> 4 <书名>javaweb开发大全</书名> 5 <作者>班长</作者> 6 <售价>99.8元</售价> 7 <简介>这书不错啊</简介> 8 </书> 9 <书> 10 <书名>葵花宝典</书名> 11 <作者>越不群</作者> 12 <售价>99.8两</售价> 13 <简介>欲练此功...</简介> 14 </书> 15 </书架>
解析:
1 package test; 2 3 import javax.xml.parsers.DocumentBuilder; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.xml.parsers.ParserConfigurationException; 6 import javax.xml.transform.Transformer; 7 import javax.xml.transform.TransformerFactory; 8 import javax.xml.transform.dom.DOMSource; 9 import javax.xml.transform.stream.StreamResult; 10 11 import org.w3c.dom.Document; 12 import org.w3c.dom.Element; 13 import org.w3c.dom.Node; 14 import org.w3c.dom.NodeList; 15 16 /** 17 * 18 * @author Angus 19 * Dom解析 20 */ 21 public class JaxpDomTest { 22 public static void main(String[] args) { 23 try { 24 run1(); 25 } catch (Exception e) { 26 // TODO Auto-generated catch block 27 e.printStackTrace(); 28 } 29 } 30 31 32 /** 33 * 添加子节点 34 * 需求:在第二本书下添加子节点 35 * @throws Exception 36 */ 37 public static void run2() throws Exception{ 38 // 创建解析器对象的工厂 39 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 40 // 获取解析器对象 41 DocumentBuilder builder = factory.newDocumentBuilder(); 42 // 解析XML 获取document对象 43 Document document = builder.parse("src/book2.xml"); 44 // 创建元素 45 Element cat = document.createElement("猫"); 46 // 设置文本 47 cat.setTextContent("我是猫"); 48 // 先获取第二本书 49 Node book2 = document.getElementsByTagName("书").item(1); 50 // 把元素添加到书的下面 51 book2.appendChild(cat); 52 // 回写 53 // 获取回写类的工厂 54 TransformerFactory transformerFactory = TransformerFactory.newInstance(); 55 // 获取回写类 56 Transformer transformer = transformerFactory.newTransformer(); 57 // 进行回写操作 58 transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml")); 59 } 60 /** 61 * 获取书名的文本内容 62 * @throws Exception 63 */ 64 public static void run1() throws Exception{ 65 //获取解析器对象工厂类 66 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 67 //获取解析器对象 68 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 69 //解析xml文档,返回document对象 70 Document document = documentBuilder.parse("src/book2.xml"); 71 //获取书名标签 72 NodeList nodeList = document.getElementsByTagName("书名"); 73 //遍历 74 for (int i = 0; i<nodeList.getLength(); i++) { 75 Node node = nodeList.item(i); 76 System.out.println(node.getTextContent()); 77 //javaweb开发大全 葵花宝典 78 } 79 } 80 }
相关文章推荐
- J2EE进阶之schema约束,JAXP的SAX解析,DOM4J的解析,XPATH的支持 七
- xml DTD的约束以及校验
- xml约束之dtd约束和schema约束---3
- XML约束文件---DTD文件
- xml的约束和dtd
- mybatis的dtd约束文件及配置文件xml自动提示
- struts-config.xml 之DTD约束文件
- 心得2--XML约束--DTD精讲
- Xml约束---dtd
- XML简介之DTD约束的相关实例
- XML DTD约束
- Xml的dtd约束
- xml约束之dtd约束和schema约束---3
- Java_xml_dtd约束规范实例
- JAVA Web开发之XML基础和DTD约束
- XML的约两种约束——DTD、Schema
- xml约束文档之DTD
- XML约束 DTD
- xml之DTD约束
- XML——XML文件约束之DTD详解