XML基础知识学习
- CDATA区:不被解析
<![CDATA[内容]]>或者转义字符:< script >子元素< /script >
- 处理指令
简称PI (processing instruction)。处理指令用来指挥解析引擎怎样解析XML文档内容。比如,在XML文档中能够使用xml-stylesheet指令。通知XML解析引擎,应用css文件显示xml文档内容。 <?xml-stylesheet type="text/css" href="1.css"?>
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
通过 DTD,您的每个 XML 文件均可携带一个有关其自身格式的描写叙述。通过 DTD。独立的团体可一致地使用某个标准的 DTD 来交换数据。而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。您还能够使用 DTD 来验证您自身的数据。
- XML DTD :文档类型定义,不严格,简单
l 使用外部DTD SYSTEM
l 使用公共DTD PUBLIC
]>
DTD元素





<!ATTLIST 元素名称 属性名 属性类型 属性约束>
属性类型 CDATA (字符串)
属性约束 #REQUIRED 这个代表属性必须有。
#FIXED 属性值的绑定
- XML Schema:语法难,约束性强
- 支持回写
- 会将整个XML加载内存,以树形结构方式存储,大文件的时候执行较慢
- XML比較复杂的时候。或者当你须要随机处理文档中数据的时候不建议使用
- 全部的东西都映射成node
- 相比DOM是一种更为轻量级的方案。 速度快
- 採用串行方法读取 --- 逐行读取
- 编程较为复杂
- 无法改动XML数据,仅仅能读。
<? xml version="1.0" encoding="UTF-8" standalone="no"? ><!-- 使用内容的dtd --><books><bookkuan=""><bookname>红楼梦</bookname><author>小张</author><value>15.6</value></book><bookkuan=""><bookname>爱我是</bookname><author>撒地方</author></book></books>
publicclass test1 {/*** @param args* @throws ParserConfigurationException* @throws IOException* @throws SAXException* @throws TransformerException*/publicstaticvoid main(String[] args)throwsParserConfigurationException,SAXException,IOException,TransformerException{// addElement();// updateText();deleteElement();}/**删除元素* @throws ParserConfigurationException* @throws SAXException* @throws IOException* @throws TransformerException* @throws TransformerFactoryConfigurationError* @throws TransformerConfigurationException*/privatestaticvoid deleteElement()throwsParserConfigurationException,SAXException,IOException,TransformerConfigurationException,TransformerFactoryConfigurationError,TransformerException{Document document = getDocument("dtd/books.xml");NodeList nodeList=document.getElementsByTagName("author");Element element=(Element) nodeList.item(0);//通过父亲来删除子节点element.getParentNode().removeChild(element);domToFile(document);}/**加入元素* @throws ParserConfigurationException* @throws SAXException* @throws IOException* @throws TransformerFactoryConfigurationError* @throws TransformerConfigurationException* @throws TransformerException*/privatestaticvoid addElement()throwsParserConfigurationException,SAXException,IOException,TransformerFactoryConfigurationError,TransformerConfigurationException,TransformerException{Document document = getDocument("dtd/books.xml");Element element= document.createElement("value");element.setTextContent("15.6");document.getElementsByTagName("book").item(0).appendChild(element);domToFile(document);}//改动publicstaticvoid updateText()throwsParserConfigurationException,SAXException,IOException,TransformerConfigurationException,TransformerFactoryConfigurationError,TransformerException{Document document = getDocument("dtd/books.xml");NodeList nodeList=document.getElementsByTagName("author");Element element=(Element) nodeList.item(1);element.setTextContent("小红");domToFile(document);}/**由于是载入到内存,所以须要回写到xml文件里* @param document* @throws TransformerFactoryConfigurationError* @throws TransformerConfigurationException* @throws TransformerException*/privatestaticvoid domToFile(Document document)throwsTransformerFactoryConfigurationError,TransformerConfigurationException,TransformerException{TransformerFactory factory=TransformerFactory.newInstance();Transformer tf=factory.newTransformer();tf.transform(newDOMSource(document),newStreamResult("dtd/books.xml"));}/**得到document* @param file* @return* @throws ParserConfigurationException* @throws SAXException* @throws IOException*/publicstaticDocument getDocument(String file)throwsParserConfigurationException,SAXException,IOException{// TODO Auto-generated method stub// 解析器工厂DocumentBuilderFactory builderFactory =DocumentBuilderFactory.newInstance();// 解析器DocumentBuilder db = builderFactory.newDocumentBuilder();Document document =(Document) db.parse(file);return document;}}
// 1.得到sax解析器工厂SAXParserFactory factory =SAXParserFactory.newInstance();// 2.得到sax解析器SAXParser parse = factory.newSAXParser();// parse.parse("xml/books.xml", new MyHandle()); //这句话能够替换以下的三句// 3.得到读取器XMLReader reader = parse.getXMLReader();// 4设置读取器的事件处理器reader.setContentHandler(newMyHandle());// 5.真正读取文件reader.parse("xml/books.xml");classMyHandleextendsDefaultHandler{
@Overridepublicvoid startDocument()throwsSAXException{System.out.println("start document");}@Overridepublicvoid startElement(String uri,String localName,String qName,Attributes attributes)throwsSAXException{// qName能够得到元素名称// 能够通过 attributes得到当前元素的全部属性System.out.println("<"+ qName +">");}@Overridpublicvoid characters(char[] ch,int start,int length)throwsSAXException{// 能够得到元素中的文本信息System.out.println(newString(ch, start, length));}@Overridepublicvoid endElement(String uri,String localName,String qName)throwsSAXException{System.out.println("<"+ qName +">");}@Overridepublicvoid endDocument()throwsSAXException{System.out.println("endDocument");}
与JDOM不同的是,dom4j使用接口和抽象基类,尽管Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。如今非常多软件採用的Dom4j,比如Hibernate。包含sun公司自己的JAXM也用了Dom4j
使用Dom4j开发。需下载dom4j对应的jar文件
XML基础知识学习的更多相关文章
- AXAJ基础知识学习
AXAJ基础知识学习 博客首页 Ajax简介 ajxa全称是Asynchronous Javascript And XML ,就是异步的JS 和XML 通过Ajax可以再浏览器中向服务器发送异步请求, ...
- JavaEE XML 基础知识
JavaEE XML 基础知识 @author ixenos 1. XML开头都需要一个声明 <?和?>表明这是一个处理指令 <?xml version=”1.0” encod ...
- GCC基础知识学习
GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...
- (转)Linux基础知识学习
Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...
- Objective-c基础知识学习笔记
Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...
- Vue2基础知识学习
Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- Linq的简介和基础知识学习
学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...
- Elasticsearch基础知识学习
概要 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...
随机推荐
- [BZOJ1433][luogu_P2055][ZJOI2009]假期的宿舍
[BZOJ1433][luogu_P2055][ZJOI2009]假期的宿舍 试题描述 输入 输出 输入示例 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 输出示例 ^_^ 数据 ...
- hadoop自定义权限
#1.测试类想运行hadoop的测试类,我们必须先编译hadoop mac下编译hadoop-2.7.4 然后查看测试类 org.apache.hadoop.hdfs.server.namenode. ...
- [暑假集训--数论]poj1595 Prime Cuts
A prime number is a counting number (1, 2, 3, ...) that is evenly divisible only by 1 and itself. In ...
- float 及 overflow 的理解
1.CSS 盒子模型: 2.float 支持属性:left right none inherit(部分支持) (1)float 属性影响范围:对紧随其后的块儿级元素起作用. (2)清除浮动常用方法:在 ...
- pat 团体天梯赛 L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...
- Nim积
假如把Nim游戏的取胜规则改为谁取走最后一个石子谁输的话 先手必胜当且仅当: 1.所有堆的石子数都为1且游戏的SG值为0 2.有些堆的石子数大于1且游戏的SG值不为0
- js 数组知识复习
2.Array类型 2.1 创建数组 两种方式: 1.new Array(); //创建一个空数组 var arr1 = new Array(); //创建一个长度为10的空数组, var arr2 ...
- 全面解析Vue.nextTick实现原理
vue中有一个较为特殊的API,nextTick.根据官方文档的解释,它可以在DOM更新完毕之后执行一个回调,用法如下: // 修改数据 vm.msg = 'Hello' // DOM 还没有更新 V ...
- 从零开始学习OpenCL开发(一)架构【转】
转自:http://blog.csdn.net/leonwei/article/details/8880012 多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/ ...
- os模块 文件操作
下面的方法可以在python程序里直接生成文件到系统路径(windows环境下测试): <<<<<<要注意字符串前面要加字母r>>>>> ...