XML基础知识学习

概念:

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 中的空格会被保留

时间: 2024-12-13 21:18:27

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

xml基础知识的学习

xml基础知识学习: xml的特点:xml与操作系统.编程语言的开发平台都无关 实现不同系统之间的数据交互 xml:可扩展标记语言 html: xml结构:   <?xml version ="1.0" encoding ="UTF-8" ?> --xml文件的声明encoding 不写默认为UTF-8 <根元素>     <子元素1 属性="value">         <元素>值</元素

XML基础知识

1.XML基础2.XML语法3.XML DOM4.Javascript解析XML文档 1.XML基础eXtensible Markup Language 可扩展标记语言XML是一种平台无关的用于携带和传送数据的方法. ~~~~xml主要是描述数据是什么,一般没有数据如何呈现的信息,有别于HTML,HTML可以说是xml的一种实现.(注:xhtml才是xml的一种实现) xml文档可以用IE 文本编辑器或者专门的XML编辑器浏览 ~~~xml不同平台的数据交换,但不适合大批量数据的存储与处理(有别

计算机基础知识学习

第一周学习 一.知识方面,总得来说,就是学习计算机基础知识. 1.从计算机的发展,应用,组成,网络等方面了解: 2.对计算机操作系统的学习:常用的操作系统,操作系统的功能.分类: 3.办公软件的学习:Word\Excel\ppt,像Word中编号格式.自动生成目录,Excel中条件格式的应用,图表插入,以及各种基础函数的使用: =SUM(Eoo*$E$3,Foo*$F$3,Goo*$G$3)  表示:用E\F\G列的各数与E3\F3\G3相乘后求和,count(if)\a 计数函数, =COUN

JavaEE XML 基础知识

JavaEE XML 基础知识 @author ixenos 1.    XML开头都需要一个声明 <?和?>表明这是一个处理指令 <?xml version=”1.0” encoding=”UTF-8” ?> 2.    <book id=”1.0”> </book> 等同于: <book> <id>1.0</id> </book> 3.    XML格式能够表达层次结构(树),并且重复的元素不会被曲解 4.

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

linux基础知识学习-linux架构

硬盘分区: 第一扇区(512bytes): MSR:master boot record (446bytes)主引导分区 partion table:(64bytes)分区表,四个.可以是主分区(primary)或者扩展分区(Extended), 每个表指向磁盘某段区间.最多只有一个扩展分区,扩展分区里面可以扩展多个逻辑分区.其余扇区(柱面(cylinder)):实际存储的地方 linux 中(\etc/fstab):IDE  总线形式不同 (a~d)/dev/hda SATA,SCSI,USB

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

(转)Linux基础知识学习

Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过修改配置文件来完成. 1.1.Linux磁盘分区 Linux可以将磁盘分为多个分区,每个分区可以被当做一个独立的磁盘使用,磁盘类型:主分区.扩展分区.逻辑分区. 主分区标记为活动,用于操作系统的引导,一块磁盘最多划分4个主分区,主分区存放操作系统的文件或用户数据. 扩展分区:主分区小于4个时才可以划