概念:
XML 指可扩展标记语言
XML 是一种标记语言,非常类似 HTML ,文本文件.
XML 的设计宗旨是数据传输,而非显示数据 。存储和传输复杂的关系模型数据
XML 标签没有被提前定义
使用约束的XML文档设计具有自我描写叙述性。 
XML 是 W3C 的推荐标准

XML语法:
一个XML文件分为例如以下几部分内容:

文档声明 <?xml version="1.0"  ecoding="utf-8">
元素:有開始有结束
属性
凝视  
CDATA区 、特殊字符 
处理指令(processing instruction)  
  • CDATA区:不被解析
<![CDATA[    
    内容
]]>
或者转义字符:
&lt; script &gt;
    子元素
&lt; /script &gt;
  • 处理指令
简称PI (processing instruction)。处理指令用来指挥解析引擎怎样解析XML文档内容。
比如,在XML文档中能够使用xml-stylesheet指令。通知XML解析引擎,应用css文件显示xml文档内容。 <?

xml-stylesheet type="text/css" href="1.css"?>

处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。 

XML约束概述
在XML技术里。能够编写一个文档来约束一个XML文档的书写规范,这称之为XML约束

为什么使用DTD?

通过 DTD,您的每个 XML 文件均可携带一个有关其自身格式的描写叙述。通过 DTD。独立的团体可一致地使用某个标准的 DTD 来交换数据。而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。您还能够使用 DTD 来验证您自身的数据。

常见的约束技术:
XML DTD 
XML Schema
  • XML DTD :文档类型定义,不严格,简单
     l 使用内部DTD   

l 使用外部DTD   SYSTEM

l 使用公共DTD   PUBLIC

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
    <book>
        <bookname>红楼梦</bookname>
            <author>小张</author>
    </book>
<book>
        <bookname>西游记</bookname>
            <author>小明</author>
    </book>
</books>       
  books.dtd(顺序,内容都严格要求)
导入本地的:
<!-- 使用外部的dtd -->
//../目录名/   訪问上上一级下的目录
<!DOCTYPE 文档根节点 SYSTEM "dtd文件的url">  

<!-- 使用内部的dtd -->
<!DOCTYPE books [
<!ELEMENT books (book+) >
<!ELEMENT book (bookname,author)>
<!ELEMENT bookname (#PCDATA)>
<!ELEMENT author (#PCDATA)>

]>

导入外部的
<!DOCTYPE 文档根节点 PUBLIC "dtd名称" "dtd文件的url">  

DTD元素









DTD属性
如:

<!ATTLIST 元素名称 属性名 属性类型 属性约束>

属性类型  CDATA  (字符串)

属性约束   #REQUIRED  这个代表属性必须有。

#FIXED    属性值的绑定

  • XML Schema:语法难,约束性强


xml解析(很重要)
读写xml
XML解析开发包
Jaxp(sun)、Jdom、dom4j
dom(Document Object Medal)即文档对象模型)
  • 支持回写
  • 会将整个XML加载内存,以树形结构方式存储,大文件的时候执行较慢
  • XML比較复杂的时候。或者当你须要随机处理文档中数据的时候不建议使用
  • 全部的东西都映射成node
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区其实的标准,差点儿全部的 XML 解析器都支持它。
  • 相比DOM是一种更为轻量级的方案。 速度快
  • 採用串行方法读取 --- 逐行读取
  • 编程较为复杂
  • 无法改动XML数据,仅仅能读。

选择 DOM 还是 SAX
应用程序的目的:假设必须对数据进行更改,而且作为 XML 将它输出,则在大多数情况下,使用 DOM
数据的数量:对于大文件,SAX 是更好的选择
将怎样使用数据:假设实际上仅仅使用一小部分数据。则使用 SAX 将数据抽取到应用程序中。这样的方法更好些
要速度:通常,SAX 实现比 DOM 实现快

JAXP(Java API for XML Processing )
JAXP是 Sun 提供的一套XML解析API,非常好的支持DOM和SAX解析方式
JAXP 开发包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成
在 javax.xml.parsers 包中,定义了几个工厂类。程序猿调用这些工厂类。能够得到对xml文档进行解析的 DOM 或 SAX 的解析器对象

1、使用DOM方式解析XML
解析器工厂类DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
解析器类DocumentBuilder
DocumentBuilder db = dbf.newDocumentBuilder();
解析生成Document对象
Document doc = db.parse("message.xml");
通过Document对象查询节点
document.getElementById   返回Node对象 --- 必须文档元素有ID属性
document.getElementsByTagName  返回NodeList对象

简单的元素增删改查样例:
<? 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;
}
 
}
2、使用SAX方式解析XML

// 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{

 
@Override
 
publicvoid startDocument()throwsSAXException{
 
System.out.println("start document");
 
}
 
 
@Override
 
publicvoid startElement(String uri,String localName,String qName,
 
Attributes attributes)throwsSAXException{
 
// qName能够得到元素名称
 
// 能够通过 attributes得到当前元素的全部属性
 
System.out.println("<"+ qName +">");
 
}
 
@Overrid
 
publicvoid characters(char[] ch,int start,int length)
 
throwsSAXException{
 
// 能够得到元素中的文本信息
 
System.out.println(newString(ch, start, length));
 
}
 
@Override
 
publicvoid endElement(String uri,String localName,String qName)
 
throwsSAXException{
System.out.println("<"+ qName +">");
}
@Override
 
publicvoid endDocument()throwsSAXException{
 
System.out.println("endDocument");
 
}
3.使用dom4j解析xml

Dom4j是一个简单、灵活的开放源码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。

与JDOM不同的是,dom4j使用接口和抽象基类,尽管Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性

Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。如今非常多软件採用的Dom4j,比如Hibernate。包含sun公司自己的JAXM也用了Dom4j

使用Dom4j开发。需下载dom4j对应的jar文件





注意:
1.一个XML元素能够包括字母、数字以及其他一些可见字符。但必须遵守以下的一些规范:
区分大写和小写,比如。<P>和<p>是两个不同的标记。
不能以数字或"_" (下划线)开头。
不能以xml(或XML、或Xml 等)开头。

不能包括空格。
名称中间不能包括冒号(:)。

2.Xml文件里的凝视採用:“<!--凝视-->” 格式。
XML声明之前不能有凝视
凝视不能嵌套
3.全部 XML 元素都须有关闭标签
XML 标签对大写和小写敏感
XML 必须正确地嵌套顺序
XML 文档必须有根元素
XML 的属性值须加引號
特殊字符必须转义
XML 中的空格会被保留

XML基础知识学习的更多相关文章

  1. AXAJ基础知识学习

    AXAJ基础知识学习 博客首页 Ajax简介 ajxa全称是Asynchronous Javascript And XML ,就是异步的JS 和XML 通过Ajax可以再浏览器中向服务器发送异步请求, ...

  2. JavaEE XML 基础知识

    JavaEE XML 基础知识 @author ixenos 1.    XML开头都需要一个声明 <?和?>表明这是一个处理指令 <?xml version=”1.0” encod ...

  3. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  4. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  5. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  6. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  7. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  8. Linq的简介和基础知识学习

    学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...

  9. Elasticsearch基础知识学习

    概要 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...

随机推荐

  1. POJ 2836:Rectangular Covering(状态压缩DP)

    题目大意:在一个平面内有若干个点,要求用一些矩形覆盖它们,一个矩形至少覆盖两个点,可以相互重叠,求矩形最小总面积. 分析: 数据很小,很容易想到状压DP,我们把点是否被覆盖用0,1表示然后放在一起得到 ...

  2. 【bzoj1095】[ZJOI2007]Hide 捉迷藏 动态点分治+堆

    题目描述 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这 ...

  3. 【bzoj3771】Triple FFT+容斥原理

    题目描述 樵夫的每一把斧头都有一个价值,不同斧头的价值不同.总损失就是丢掉的斧头价值和. 他想对于每个可能的总损失,计算有几种可能的方案. 注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)视 ...

  4. cf 853 B Jury Meeting [前缀和]

    题面: 传送门 思路: 看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉 而且这道题只有去首都和离开首都的机场 因此考虑计算去首都的飞机的前缀最小花费,以及离开首 ...

  5. AngularJS实现TodoMVC

    一个小的to do list,界面如下 首先安装angular js,出现了无非安装到桌面的问题,安装到D盘了 npm install angular 文件结构: index.html: <!d ...

  6. Python与其他语言时间戳

    时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数.它也被称为 Unix 时间戳(Unix Timestamp). Unix时间戳(Unix timestamp),或称Un ...

  7. Repeater的使用及其鼠标特效,行链接的使用

    原文发布时间为:2009-04-22 -- 来源于本人的百度文章 [由搬家工具导入] <asp:Repeater ID="rpt" runat="server&qu ...

  8. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---32

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  9. Caps_Locl exchang Esc

    vim ~/.Xmodmap  1 remove Lock = Caps_Lock                                          2 keysym Escape = ...

  10. javascript 动态添加城市

    匿名函数的使用 createTextnode 创建文本 createElement   创建元素 appendChild     将文本或元素追加 <!DOCTYPE html> < ...