概念:
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. 【HDU 1686 Oulipo】

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  2. pat 甲级 1022. Digital Library (30)

    1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...

  3. 【HDOJ5536】Chip Factory(Trie树)

    题意:给定n个数字,第i个数字为a[i],求max((a[i]+a[j])^a[k]),其中i,j,k互不相同 n<=1000,0<=a[i]<=1e9 思路:队友写的,抱大腿 先对 ...

  4. 呵呵呵呵。。。系统还原了,终于可以用IE登陆百度了

    原文发布时间为:2009-12-19 -- 来源于本人的百度文章 [由搬家工具导入] 呵呵呵呵。。。今天终于有时间把系统还原了,终于可以用IE登陆百度了

  5. 将一个二叉树左右翻转(Java 版)

    public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; ...

  6. vim的语法高亮及配置文件说明

    本文主要针对那些刚刚入门的菜鸟,老手请自动忽略,谢谢. 一.安装vim: sudo pacman -S vim 随后根据提示输入超级用户密码即可完成安装 二.配置自己的语法高亮文件,主要是修改-/.v ...

  7. why not ovp protection ?

    HW MSM8917 PM8937 PMI8940 Question : Recently, I connect usb cable with 10V to the phone. Why does t ...

  8. CString 转换为 char*

    CString str="这是一个测试"; char* str_0=str.GetBuffer(0);

  9. localStorage.getItem

    WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的user ...

  10. Linux笔记:crond

    crontab中列出需要执行的命令及执行时间.由于指定的日期Day与星期Week不是相互包含的关系,而是有相交也有不相交的时间.当日期数与星期数均指定为确定值的时候,指令的执行时间到底是什么样的,之前 ...