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 ...
随机推荐
- 安装配置apache sentry服务
环境 系统环境:Centos6.7 Hadoop版本:CDH5.10 jdk版本:jdk7 注:本文并未集成kerberos组件 安装Sentry Server 选择安装hive的节点进行安装测试: ...
- CH Round #59 - OrzCC杯NOIP模拟赛day1
第一题:队爷的新书 题意简述:给定n个闭区间,求出一个数p使它与包含它的区间数的积最大,输出这个积. 分析:使用一个差分数组g,每个区间[l,r],l位置加1,r+1的位置减1,从前往后统计,得到对于 ...
- 【bzoj4012】[HNOI2015]开店 动态点分治+STL-vector
题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们面临着一个问题 ...
- 【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set
题目描述 给定一个长度为N的数组a和M,求一个区间[l,r],使得$(\sum\limits_{i=l}^{r}{a_i})\ mod\ M$的值最大,求出这个值,注意这里的mod是数学上的mod(即 ...
- [SDOI2016][bzoj4514] 数字配对 [费用流]
题面 传送门 思路 一个数字能且只能匹配一次 这引导我们思考:一次代表什么?代表用到一定上限(b数组)就不能再用,同时每用一次会产生价值(c数组) 上限?价值?网络流! 把一次匹配设为一点流量,那产生 ...
- [暑假集训--数论]poj3518 Prime Gap
The sequence of n − 1 consecutive composite numbers (positive integers that are not prime and not eq ...
- cf 701 E - Connecting Universities
Descrition 给你一颗\(n\le 2*10^5\)个点的树, 有\(2*k(2k\le n)\)座大学座落在点上 (任二大学不在同一个点) 求一种两两匹配的方案, 使得距离和最大 即\[ma ...
- Mysql存储过程给变量赋值的几种方法实践
BEGIN DECLARE v_request_count INT; #申请次数 DECLARE v_plan_count INT; #安排次数 DECLARE v_learn_count INT; ...
- 介绍一个牛X的样式counter
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- [LeetCode] Jump Game II 贪心
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...