XML轻松学习手册(5)XML实例解析
XML轻松学习手册

XML轻松学习手册前言XML越来越热,关于XML的基础教程网络上也随处可见。
可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。
首先有两点是需要肯定的:第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高。
不要害怕和逃避,毕竟我们还年轻。
提纲本文共分五大部分。
分别是XML快速入门,XML的概念,XML 的术语,XML的实现,XML的实例分析。
最后附录介绍了XML的相关资源。
作者站在普通网页设计人员的角度,用平实生动的语言,向您讲述XML的方方面面,帮助你拨开XML的神秘面纱,快速步入XML的新领域。
第一章:XML快速入门一. 什么是XML二. XML是新概念吗三. 使用XML有什么好处四. XML很难学吗五. XML和HTML的区别六. XML的严格格式七. 关于XML的更多一. 什么是XML这往往是第一个问题,也往往在第一个问题上你就会搞不明白,因为大多的教材上这样回答:XML是Extensible Markup Language的简写,一种扩展性标识语言。
这是标准的定义。
那么什么是标志语言,为什么叫扩展性已经让人有些糊涂。
我想我们这样来理解会好一些:对HTML你已经非常熟悉了吧,它就是一种标记语言,记得它的全称吗:"Hypertext Markup Language" 超文本标记语言。
明白了同时,HTML里面有很多标签,类似,等,都是在HTML里规范和定义,而XML里允许你自己创建这样的标签,所以叫做可扩展性。
这里有几个容易混淆的概念要提醒大家:并不是标记语言。
它只是用来创造标记语言(比如HTML)的元语言。
天,又糊涂了!不要紧,你只要知道这一点:XML和HTML是不一样的,它的用处途比HTML广泛得多,我们将在后面仔细介绍。
XML文件详解以及解析

XML⽂件详解以及解析⼀、xml基础详解:1、概述:xml:即可扩展标记语⾔,xml是互联⽹数据传输的重要⼯具,它可以跨越互联⽹任何的平台,不受编程语⾔和的限制,可以说它是⼀个拥有互联⽹最⾼级别通⾏证的数据携带者。
xml是当前处理结构化⽂档信息中相当给⼒的技术,xml有助于在服务器之间穿梭结构化数据,这使得开发⼈员更加得⼼应⼿的控制数据的存储和传输。
Xml⽤于标记电⼦⽂件使其具有结构性的标记语⾔,可以⽤来标记数据、定义数据类型,是⼀种允许⽤户对⾃⼰的标记语⾔进⾏定义的源语⾔。
Xml是标准通⽤标记语⾔(SGML)的⼦集,⾮常适合Web传输。
XML提供统⼀的⽅法来描述和交换独⽴于应⽤程序或供应商的结构化数据。
2、xml的特点及作⽤:特点:v xml与、编程语⾔的开发平台都⽆关;v 实现不同系统之间的数据交互。
作⽤:v 配置应⽤程序和⽹站;v 数据交互;v Ajax基⽯。
在配置⽂件⾥边所有的配置⽂件都是以XMl的格式来编写的。
跨平台进⾏数据交互,它可以跨操作系统,也可以跨编程语⾔的平台。
Ajax是现在⽬前⽐较流⾏的⼀个⽹络交互的技术。
Ajax⾥⾯最后⼀个x实际上就是xml的缩写。
Xml(Extensible Markup Language)是可扩展标记语⾔⼀个xml⽂档必须要有第⼀⾏的声明和它的⽂档元素的描述信息就可以了。
3、xml声明例⼦:注:xml声明⼀般是xml⽂档的第⼀⾏;xml声明由以下⼏个部分组成:4、根元素它是xml⽂档⾥⾯唯⼀的;它的开始是放在最前⾯,结束是放在最后⾯。
5、元素:(1) 所有的xml元素都必须有结束标签;(2) xml标签对⼤⼩写敏感;(3) xml必须正确地嵌套;(4)元素的命名规则:名称中可以包含字母、数字或者其他的字符;名称不能以数字或者标点符号开始;名称中不能包含空格。
(5)空元素6、属性(1)语法<元素名属性名=“属性值”/>例:<Student ID=“S100”><Name>Tom</Name></Student>(2)注意:属性值⽤双引号包裹;⼀个元素可以有多个属性,它的基本格式为:<元素名属性名=“属性值” 属性名=“属性值”>;属性值中不能够直接包含<.”,&。
简单xml文件示例

简单xml文件示例摘要:1.XML 文件的概述2.XML 文件的结构3.XML 文件的元素和属性4.XML 文件的注释5.XML 文件的编码6.XML 文件的应用正文:1.XML 文件的概述XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。
它由万维网联盟(W3C)于1998 年推出,被广泛应用于各种场景,如配置文件、数据交换和网页设计等。
XML 文件是由一系列的元素、属性、注释和编码组成的。
2.XML 文件的结构一个XML 文件的基本结构如下:```<?xml version="1.0" encoding="UTF-8"?><根元素><子元素1><!-- 注释1 --><子元素2><!-- 注释2 --></子元素2></子元素1><!-- 注释3 --></根元素>```其中,`<?xml version="1.0" encoding="UTF-8"?>`是XML 文件的声明,指定了XML 文件的版本和编码。
`<根元素>`表示XML 文件的根元素,所有的子元素都包含在根元素内部。
3.XML 文件的元素和属性XML 文件中的元素由尖括号(`<`)包围,如`<根元素>`。
元素可以包含子元素和属性。
属性是元素的特性,由“属性名=属性值”的形式表示,如`<子元素1 attr1="值1" attr2="值2">`。
4.XML 文件的注释XML 文件中的注释以`<!--`开始,以`-->`结束,如`<!-- 注释1 -->`。
注释不会被解析器解析,对文档的结构和内容没有影响,主要用于对文档的描述和解释。
XML轻松学习手册(五)_XML语法

XML轻松学习手册(五):XML语法疯狂代码 / ĵ:http://XMLJiaoCheng/Article20196.html 第 5章:XML例子解析提纲: ;:例子效果 ;2:例子解析 ; 1.定义新标识 2.建立XML文档 3.建立相应HTML文件 ;XML在区别领域有着广泛应用比如在科技领域MathML无线通信应用WML在网络图象方面SVG等等我们这里侧重讨论XML在web上应用XML在web上应用主要是利用其强大数据操作能力般用XML配合javascript和asp等服务器端可以实现网络上几乎所有应用需求 ;考虑讲解方便我们在下面介绍个简单例子不包含服务器端目在于让您对XML数据操作能力有个感性认识 ;好我们首先[ ;点击这里 ;]来看例子效果(请用IE5.0以上版本浏览器打开) ;这是个简单CD唱片数据检索功能你通过点击\"上张\",\"下张\"可以看到单张CD有关信息这样效果我们原来用两种思路方法可以实现: ;1.利用DHTML将数据隐藏在区别层中通过鼠标事件依次显示; ;2.利用后台(如ASP,CGI,PHP,JSP等)服务器端数据 ;但是在这个例子中我们打开页面原代码可以看到其中没有用DHTMLDIV也没有表单action它完全是用XML来实现下面我们来分析它制作过程:第步:定义新标识根据实际CD数据首先新建个名为<CD>标识;其次建立它相关数据标识分别是:CD名称<Title>,演唱者<Artist>,出版年代<Year>,国家<Country>,发行公司<Company>和价格<Price>;最后还要建立个名为目录<CATALOG>标识为什么要再建立个<CATALOG>标识呢?在XML文档中规定必须且只能有个根元素(标识)我们有多个CD数据这些数据是并列关系所以需要为这些并列元素建立个根元素以上元素定义和关系都完全符合XML标准不需要特别DTD文件来定义所以可以省略DTD定义如果我们想使用DTD来定义以上过程可以表示为:<!ELEMENT ;CATALOG ;(CD)*><!ELEMENT ;CD ;(Title,Artist,Year,Country,Company,Price)><!ELEMENT ;Title ;(#PCDATA)><!ELEMENT ;Artist ;(#PCDATA)><!ELEMENT ;Year ;(#PCDATA)><!ELEMENT ;Country ;(#PCDATA)><!ELEMENT ;Company ;(#PCDATA)><!ELEMENT ;Price ;(#PCDATA)>这段代码表示:元素CATALOG包含多个CD子元素而子元素CD又依次包含Title, ;Artist, ;Year, ;Country,;Company, ;Price ; 6个子元素它们内容都定义为文本(,数字,文本)(注:具体语法介绍说明可以看上章有关DTD介绍) ;第 2步:建立XML文档<?xml ;version=\"1.0\"?><CATALOG><CD><TITLE>Empire ;Burlesque</TITLE><ARTIST>Bob ;Dylan</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE><YEAR>1985</YEAR></CD><CD><TITLE>Hide ;your ;heart</TITLE><ARTIST>Bonnie ;Tylor</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>CBS ;Records</COMPANY><PRICE>9.90</PRICE><YEAR>1988</YEAR></CD><CD><TITLE>Greatest ;Hits</TITLE><ARTIST>Dolly ;Parton</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>RCA</COMPANY><PRICE>9.90</PRICE><YEAR>1982</YEAR></CD><CD><TITLE>Still ;got ;the ;blues</TITLE><ARTIST>Gary ;More</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Virgin ;redords</COMPANY><PRICE>10.20</PRICE><YEAR>1990</YEAR></CD><CD><TITLE>Eros</TITLE><ARTIST>Eros ;Ramazzotti</ARTIST><COUNTRY>EU</COUNTRY><COMPANY>BMG</COMPANY><PRICE>9.90</PRICE><YEAR>1997</YEAR></CD></CATALOG> ;上面代码首先用<?xml ;version=\"1.0\"?>声明语句表明这是个XML文档它格式遵守XML ;1.0标准规范标准然后是文档内容结构树非常清晰:<CATALOG><CD>...... ;</CD><CD>...... ;</CD></CATALOG>共定义了5组数据我们将上面代码存为cd.xml文件以备 ;2009-2-12 3:46:19疯狂代码 /。
xml解析配置步骤

xml解析配置步骤XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它被广泛用于配置文件中。
解析XML配置文件是将XML文件中的数据提取出来并进行解析的过程。
在本篇文章中,我们将介绍XML解析配置的具体步骤。
1.导入相关类库在开始解析XML之前,我们需要导入相关类库来处理XML数据。
Java 中常用的XML解析器有DOM、SAX和StAX。
DOM解析器将整个XML文档读入内存,形成一个树形结构,可以对节点进行增删改查操作。
SAX解析器逐行读取XML文档,通过事件驱动机制对XML文档进行解析和处理。
StAX 解析器以流式方式解析XML文档,可以同时进行读取和写入操作。
根据具体需求,选择适合的XML解析器并导入相关类库。
2.创建解析器对象在使用DOM或SAX解析器之前,需要先创建解析器对象。
对于DOM解析器,使用DocumentBuilder类的newInstance(方法创建解析器实例。
对于SAX解析器,创建SAXParserFactory对象,并调用其newSAXParser(方法创建解析器实例。
对于StAX解析器,使用XMLInputFactory类的newInstance(方法创建解析器实例。
3.解析XML文件使用解析器对象解析XML文件。
对于DOM解析器,可以使用parse(方法解析XML文件,该方法接受一个File对象、一个InputStream对象或一个URL对象作为参数。
对于SAX解析器,需要创建一个继承自DefaultHandler的类来处理XML文件的解析事件,然后调用解析器的parse(方法,传入XML文件和事件处理类。
对于StAX解析器,需要创建一个XMLStreamReader对象,使用createXMLStreamReader(方法传入XML文件进行解析。
4.获取根元素在DOM解析中,可以使用getDocumentElement(方法获取XML文档的根元素。
在SAX解析中,需要重写startDocument(方法,在该方法中获取XML文档的根元素。
xml 格式 解析

xml 格式解析XML格式解析是一种常见的数据解析方法,它可以将XML格式的数据转换为可供程序使用的数据结构。
XML即可扩展标记语言(eXtensible Markup Language),它被广泛应用于数据交换和存储。
下面将介绍XML格式解析的原理和常用的解析方法。
XML格式解析的原理是通过读取XML文件并识别其中的标签、属性和文本内容,将其转换为内存中的数据结构,以便程序进行进一步处理。
XML文件由起始标签、结束标签、属性和文本内容组成。
解析器会根据这些组成部分对XML文档进行解析。
常用的XML格式解析方法有两种:DOM解析和SAX解析。
DOM(文档对象模型)解析是一种将整个XML文档加载到内存中,并构建一个XML树结构的解析方法。
它可以方便地对XML文档进行增删改查操作。
DOM解析器会先将整个XML文档加载到内存中,然后构建一个树状结构,通过遍历树状结构来访问和操作XML文档的节点。
SAX(简单 API for XML)解析是一种基于事件驱动的解析方法。
它边读取XML文档边解析,并在读取到XML文档的不同部分时触发相应的事件。
相比DOM解析,SAX解析更加高效,特别适用于大型XML文件的解析。
SAX解析器会逐行读取XML文档,当遇到起始标签、结束标签或文本内容时触发相应的事件,并通过事件处理程序来处理这些事件。
选择使用DOM解析还是SAX解析取决于具体的需求。
如果需要对XML文档进行多次操作或查询,DOM解析更方便。
但是,如果处理大型XML文件或只需一次性读取XML数据,SAX解析更高效。
总之,XML格式解析是处理XML数据的重要技术。
通过DOM解析和SAX 解析,我们可以将XML格式的数据转换为程序可以处理的数据结构,实现数据的读取、分析和操作。
xml文件的解析过程详解

xml⽂件的解析过程详解XML项⽬⼯程展⽰图如下图:student.xml ⽂件展⽰:<?xml version="1.0" encoding="utf-8" ?><person><student id='1'><name>余超</name><sex>男</sex><desc>⼀个执着⽽⼜天真的孩⼦</desc></student><student id='2'><name>马靖</name><sex>⼥</sex><desc>⼀个特别难追求的⼥孩⼦</desc></student></person>Student实体类的展⽰:其作⽤就是⽤于临时保存xml⽂件中的数据到属性中package net.nyist.xmlparse.domain;import java.io.Serializable;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年9⽉30⽇下午10:52:47*/@SuppressWarnings("serial")public class Student implements Serializable {private int id;private String name;private String sex;private String desc;public Student() {}public Student(int id, String name, String sex, String desc) {this.id = id; = name;this.sex = sex;this.desc = desc;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return"Student [id=" + id + ", name=" + name + ", sex=" + sex+ ", desc=" + desc + "]";}}⽅法⼀:通过DOM来解析XML⽂件 package net.nyist.xmlparse.parse.domimport java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import net.nyist.xmlparse.domain.Student;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年9⽉30⽇下午11:12:57*/public class DocumentBuilderFactoryDemo {public static void main(String[] args) {long start = System.currentTimeMillis();/** ⾸先得到:得到 DOM 解析器的⼯⼚实例 */DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();List<Student> students = new ArrayList<Student>();try {/** 然后从 DOM ⼯⼚获得 DOM 解析器 */DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();InputStream is = DocumentBuilderFactoryDemo.class.getClassLoader().getResourceAsStream("student.xml");Document document = documentBuilder.parse(is);/** 得到 XML ⽂档的根节点 */Element element = document.getDocumentElement();NodeList nodeList = element.getElementsByTagName("student");Student student = null;for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);int id = Integer.parseInt(node.getAttributes().getNamedItem("id").getNodeValue());String nameValue = "";String sexValue = "";String descValue = "";if (node.hasChildNodes()) {NodeList childNodes = node.getChildNodes();for (int j = 0; j < childNodes.getLength(); j++) {Node node2 = childNodes.item(j);if ("name".equals(node2.getNodeName())) {nameValue = node2.getFirstChild().getTextContent();} else if ("sex".equals(node2.getNodeName())) {sexValue = node2.getFirstChild().getTextContent();} else if ("desc".equals(node2.getNodeName())) {descValue = node2.getFirstChild().getTextContent();}}student = new Student(id, nameValue, sexValue, descValue);students.add(student);}}} catch (Exception e) {e.printStackTrace();}for (int i = 0; students != null && students.size() > 0&& i < students.size(); i++) {System.out.println(students.get(i));}System.out.println("共⽤时:"+(System.currentTimeMillis()-start));}}⽅法⼆:⽤SAX解析XML⽂件package net.nyist.xmlparse.parse.sax;import java.io.IOException;import java.util.ArrayList;import java.util.List;import net.nyist.xmlparse.domain.Student;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.Locator;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年10⽉1⽇下午6:38:52** @deprecated 本类是⽤来对于XML⽂本的解析类*/public class PersonHandle extends DefaultHandler {private Student student;private List<Student> students;/**对于这个属性的使⽤主要作⽤是为了⽤来存放标签的名称,由此⽽获得这个标签下的⽂本内容的值*/ private String tagName;public List<Student> getStudents() {return students;}public InputSource resolveEntity(String publicId, String systemId)throws IOException, SAXException {return null;}public void setDocumentLocator(Locator locator) {System.out.println("加载器开始处理xml⽂档........");}public void startDocument() throws SAXException {System.out.println("⽂档开始加载.........");students = new ArrayList<Student>();}public void endDocument() throws SAXException {System.out.println("xml⽂档处理结束.........");}public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {tagName = qName;if ("student".equals(qName)) {student = new Student();int id = Integer.parseInt(attributes.getValue("id"));student.setId(id);}}public void endElement(String uri, String localName, String qName)throws SAXException {if ("student".equals(qName)) {students.add(student);}/**将其值变为null的主要⽬的是为了防⽌再次遍历的时候保存了结尾标签,这样会有空值的存在*/tagName = null;}public void characters(char ch[], int start, int length)throws SAXException {if (!"".equals(tagName) && tagName != null) {if ("name".equals(tagName)) {student.setName(new String(ch, start, length));} else if ("sex".equals(tagName)) {student.setSex(new String(ch, start, length));} else if ("desc".equals(tagName)) {student.setDesc(new String(ch, start, length));}}}public static void main(String[] args) {PersonHandle personHandle =new PersonHandle();System.out.println(personHandle.getStudents());}}package net.nyist.xmlparse.parse.sax;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import net.nyist.xmlparse.domain.Student;import org.xml.sax.SAXException;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年10⽉1⽇下午6:30:51*/public class SaxFacroryParseDemo {public static void main(String[] args) {long start =System.currentTimeMillis();/** 创建SAX解析器⼯⼚对象*/SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();try {/** 使⽤解析器⼯⼚创建解析器实例 */SAXParser saxParser = saxParserFactory.newSAXParser();/**加载资源⽂件*/InputStream is = SaxFacroryParseDemo.class.getClassLoader().getResourceAsStream("student.xml");/*** 如果采⽤SAX⽅式来对于XML⽂件的处理的时候必须要使⽤xml⽂件的处理类:* 对于本例我使⽤默认的处理类PersonHandle,此类必须要继承 DefaultHandler 这个类,然后重载这个类的⽅法,以⾄于对于xml⽂档的处理 ** */PersonHandle personHandle = new PersonHandle();saxParser.parse(is, personHandle);List<Student> students = personHandle.getStudents();System.out.println("打印⽂档的内容:");for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共⽤时:"+(System.currentTimeMillis()-start));} catch (ParserConfigurationException | SAXException | IOException e) {e.printStackTrace();}}}⽅法三:jdom解析XML⽂件:需要引⼊jdom.jar包package net.nyist.xmlparse.parse.jdom;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import net.nyist.xmlparse.domain.Student;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年10⽉1⽇下午9:08:47*/public class SAXBuilderDemo {@SuppressWarnings("unchecked")public static void main(String[] args) {long start = System.currentTimeMillis();SAXBuilder saxBuilder = new SAXBuilder();/**加载资源⽂件*/InputStream in = SAXBuilderDemo.class.getClassLoader().getResourceAsStream("student.xml");try {Document document = saxBuilder.build(in);Element element = document.getRootElement();List<Element> list = element.getChildren();if (list != null && list.size() > 0) {List<Student> students = new ArrayList<Student>();for (int i = 0; i < list.size(); i++) {Element studentElement = list.get(i);int id = studentElement.getAttribute("id").getIntValue();String nameValue = studentElement.getChild("name").getText();String sexValue = studentElement.getChild("sex").getText();String descValue = studentElement.getChild("desc").getText();Student student = new Student(id, nameValue, sexValue,descValue);students.add(student);}for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共⽤时:"+ (System.currentTimeMillis() - start));}} catch (JDOMException | IOException e) {e.printStackTrace();}}}⽅法四:通过dom4j解析XML⽂件:引⼊两个包dom4j.jar 与jaxen.jar package net.nyist.xmlparse.parse.dom4j;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import net.nyist.xmlparse.domain.Student;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;/*** @author yuchao** @school 南阳理⼯软件学院移动设备应⽤与开发移动四班** @email yu0312chao@** @time 2014年10⽉1⽇下午9:45:12*/public class SAXReaderDemo {@SuppressWarnings("unchecked")public static void main(String[] args) {long start = System.currentTimeMillis();SAXReader saxReader =new SAXReader();InputStream in =SAXReaderDemo.class.getClassLoader().getResourceAsStream("student.xml");try {Document document = saxReader.read(in);Element element = document.getRootElement();List<Element> rootElements = element.elements();List<Student> students =new ArrayList<Student>();Student student =null;for (int i = 0;rootElements!=null && i < rootElements.size(); i++) {Element childElement = rootElements.get(i);int id =Integer.parseInt(childElement.attribute("id").getText());String nameValue =childElement.elementText("name");String sexValue =childElement.elementText("sex");String descValue =childElement.elementText("desc");student =new Student(id, nameValue, sexValue, descValue);students.add(student);}for (int i = 0; students != null && i < students.size(); i++)System.out.println(students.get(i));System.out.println("共⽤时:"+ (System.currentTimeMillis() - start));} catch (DocumentException e) {e.printStackTrace();}}}。
xml文本解析

xml文本解析此文档介绍了xml文本的解析技术,详细介绍了XML文本的结构和解析方法,以及一些软件工具对xml文本的解析方法。
一、XML文本结构1、XML文本由根元素(root element)和子元素(child element)组成。
每个元素都包含一个开始标记,一个结束标记,以及包含内容的文本节点(text node),并且可以包含属性标记(attribute)。
2、XML文本不区分大小写,所有的标记和属性名称都可以用大写或者小写表示。
3、XML文本的文档声明必须是第一行文本,格式如下:<?xml version='1.0' encoding='[字符集]'?>4、XML文档必须有一个根元素,所有元素都必须在根元素内。
5、XML文档中的所有元素必须有正确的结束标记。
6、XML文档中所有元素包含在开始标记和结束标记之间,且不能出现重叠。
7、XML文档中必须使用双引号来定义属性,且属性值必须使用双引号括起来。
二、XML文本解析方法1、DOM(Document Object Model)文档对象模型:DOM采用基于树型结构的模型,将XML文档转换为一颗树,DOM 会把XML文档分解成节点,然后以此为基础来解析XML文档。
2、SAX(Simple Api for XML):SAX采用事件驱动的模式,它把XML文档作为一个流来处理,只会一行一行的顺序读取XML文档,不会将XML文档以语法树的形式解析出来。
三、XML文档解析软件1、XmlSpy:XmlSpy是一款可视化的XML文档解析软件,它可以创建,解析,测试,打开,编辑,以及调试XML文档。
2、XmlPad:XmlPad是一款功能强大的XML文档解析软件,它拥有智能编辑、实时格式化、标准规范和折叠展开等功能,可以让用户更加轻松地进行XML文档的编辑。
3、XmlFox:XmlFox是一款支持XML文档的可视化编辑软件,它支持语法高亮显示,多种编码,可以同时编辑多个文件,可以轻松查看每个元素的结构等特性,从而让XML文档的编辑变得更加容易。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章:XML实例解析提纲:一:实例效果二:实例解析1.定义新标识。
2.建立XML文档。
3.建立相应的HTML文件。
XML在不同领域有着广泛的应用,比如在科技领域的MathML,无线通信应用的WML,在网络图象方面的SVG等等,我们这里侧重讨论XML在web上的应用。
XML在web上应用主要是利用其强大的数据操作能力。
一般用XML配合javascript和asp等服务器端程序,可以实现网络上几乎所有的应用需求。
考虑讲解方便,我们在下面介绍一个简单的实例,不包含服务器端程序。
目的在于让您对XML的数据操作能力有一个感性的认识。
好,我们首先[ 点击这里]来看实例的效果。
(请用IE5.0以上版本浏览器打开)这是一个简单的CD唱片数据检索功能。
你通过点击"上一张","下一张"可以看到单张CD的有关信息。
这样的效果我们原来用两种方法可以实现:1.利用DHTML,将数据隐藏在不同的层中,通过鼠标事件依次显示;2.利用后台程序(如ASP,CGI,PHP,JSP等),调用服务器端的数据。
但是在这个实例中,我们打开页面原代码可以看到,其中没有用DHTML的DIV,也没有表单的action,它完全是用XML来实现的。
下面我们来分析它的制作过程:第一步:定义新标识。
根据实际的CD数据,首先新建一个名为<CD>的标识;其次建立它相关的数据标识,分别是:CD名称<Title>,演唱者<Artist>,出版年代<Year>,国家<Country>,发行公司<Company>和价格<Price>;最后还要建立一个名为目录<CATALOG>的标识。
为什么要再建立一个<CATALOG>标识呢?因为在XML文档中规定,必须且只能有一个根元素(标识),我们有多个CD数据,这些数据是并列的关系,所以需要为这些并列的元素建立一个根元素。
以上元素的定义和关系都完全符合XML标准,不需要特别的DTD文件来定义,所以可以省略DTD定义。
如果我们想使用DTD来定义,以上过程可以表示为:<!ELEMENT CATALOG (CD)*><!ELEMENT CD (Title,Artist,Year,Country,Company,Price)><!ELEMENT Title (#PCDATA)><!ELEMENT Artist (#PCDATA)><!ELEMENT Year (#PCDATA)><!ELEMENT Country (#PCDATA)><!ELEMENT Company (#PCDATA)><!ELEMENT Price (#PCDATA)>这段代码表示:元素CATALOG包含多个CD子元素,而子元素CD又依次包含Title, Artist, Year, Country, Company, Price 六个子元素,它们的内容都定义为文本(字符,数字,文本)。
(注:具体的语法说明可以看上一章关于DTD的介绍)第二步:建立XML文档。
<?xml version="1.0"?><CATALOG><CD><TITLE>Empire Burlesque</TITLE><ARTIST>Bob Dylan</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE><YEAR>1985</YEAR></CD><CD><TITLE>Hide your heart</TITLE><ARTIST>Bonnie Tylor</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>CBS Records</COMPANY><PRICE>9.90</PRICE><YEAR>1988</YEAR></CD><CD><TITLE>Greatest Hits</TITLE><ARTIST>Dolly Parton</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>RCA</COMPANY><PRICE>9.90</PRICE><YEAR>1982</YEAR></CD><CD><TITLE>Still got the blues</TITLE><ARTIST>Gary More</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Virgin redords</COMPANY><PRICE>10.20</PRICE><YEAR>1990</YEAR></CD><CD><TITLE>Eros</TITLE><ARTIST>Eros Ramazzotti</ARTIST><COUNTRY>EU</COUNTRY><COMPANY>BMG</COMPANY><PRICE>9.90</PRICE><YEAR>1997</YEAR></CD></CATALOG>上面代码首先用<?xml version="1.0"?>声明语句表明这是一个XML文档,它的格式遵守XML 1.0标准规范。
然后是文档内容,结构树非常清晰:<CATALOG><CD>......</CD><CD>......</CD></CATALOG>一共定义了5组数据。
我们将上面的代码存为cd.xml文件,以备调用。
第三步:建立相应的HTML文件。
1.导入XML数据。
我们知道,目前流行的浏览器中,暂时只有微软的IE5.0以上版本浏览器支持XML。
IE是通过在HTML中的object物件来支持插入XML,并通过js的XMLDocument.load()方法来导入数据。
我们看代码: <object WIDTH="0" HEIGHT="0"CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" ID="xmldso"></object>定义一个object,ID名为xmldso。
然后在head区用js引入xml数据:<script for="window" event="onload">xmldso.XMLDocument.load("cd.xml");</script>2.捆绑数据。
然后将用<SPAN>标识来将XML数据绑定在表格中。
其中ID,DATASRC,DTATFLD都是<SPAN>的属性。
代码如下:<table><tr><td>Title:</td><td><SPAN ID="title" DATASRC=#xmldsoDATAFLD="TITLE"></SPAN></td></tr><tr><td>Artist:</td><td><SPAN ID="artist" DATASRC=#xmldsoDATAFLD="ARTIST"></SPAN></td></tr><tr><td>Year:</td><td><SPAN ID="year" DATASRC=#xmldsoDATAFLD="YEAR"></SPAN></td></tr><tr><td>Country:</td><td><SPAN ID="country" DATASRC=#xmldso DATAFLD="COUNTRY"></SPAN></td></tr><tr><td>Company:</td><td><SPAN ID="company" DATASRC=#xmldso DATAFLD="COMPANY"></SPAN></td></tr><tr><td>Price:</td><td><SPAN ID="price" DATASRC=#xmldsoDATAFLD="PRICE"></SPAN></td></tr></table>3.动作操作。
最后,为数据提供浏览按钮:<INPUT TYPE=button VALUE="上一张CD" ONCLICK="moveprevious()"><INPUT TYPE=button VALUE="下一张CD" ONCLICK="movenext()">并利用js来完成两个鼠标点击功能:movenext()和moveprevious()。