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

合集下载

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⽂件详解以及解析⼀、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文件示例

简单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语法

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文件中的数据提取出来并进行解析的过程。

在本篇文章中,我们将介绍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格式的数据转换为可供程序使用的数据结构。

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⽂件的解析过程详解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文本的解析方法。

一、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文档的编辑变得更加容易。

xml解析原理

xml解析原理

xml解析原理XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。

它具有自描述性、跨平台和可扩展的特点,被广泛应用于各种领域。

而在使用XML数据时,我们需要将其解析为计算机可以理解和处理的格式。

本文将介绍XML解析的原理以及常用的解析方法。

一、XML解析原理概述XML解析过程是将XML文档转化为计算机可以读取和操作的数据结构的过程。

XML解析器会按照一定的规则对XML文档进行解析,并将其转换为内存中的树形结构,常用的树形结构包括DOM(文档对象模型)和SAX(简单API for XML)。

DOM解析器会将整个XML文档加载到内存中,并构建一颗树形结构,开发者可以通过操作树节点的方式读取和修改XML数据。

DOM 解析器适用于XML文档较小的情况,但在处理大型XML文档时,会占用较大的内存资源。

SAX解析器则是一种基于事件驱动的解析方法,它不会将整个XML文档加载到内存中,而是顺序地读取XML文档,当遇到特定事件(如标签的开始和结束)时触发相应的处理方法。

SAX解析器适用于处理大型XML文档,但对于复杂的XML文档结构,操作起来相对繁琐。

二、DOM解析器DOM解析器是常用的XML解析方法之一。

其解析过程包括以下几个步骤:1. 加载XML文档:DOM解析器会读取XML文档,并将其加载到内存中。

2. 构建文档对象模型:解析器会根据XML文档的结构构建一颗树形结构,即文档对象模型。

树的每个节点代表XML文档中的一个元素、属性或文本。

3. 遍历和操作节点:开发者可以通过遍历和操作节点的方式读取和修改XML数据。

解析器提供了一系列的API方法,如获取节点的名称、值、属性等信息,以及增删改查节点等操作。

4. 释放内存资源:当完成对XML文档的操作后,解析器需要释放内存资源,以便其他程序或进程使用。

DOM解析器相对简单易用,适用于较小的XML文档。

但当XML文档较大时,会占用较多的内存资源,并且解析速度较慢。

xml文件解析方法

xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。

在处理XML文件时,解析是必不可少的环节。

本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。

一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。

DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。

DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。

1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。

2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。

3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。

4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。

二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。

在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。

相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。

1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。

2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。

XML入门简单易懂教程

XML入门简单易懂教程

XML入门简单易懂教程1.XML的基本概念2.XML的语法规则XML的语法规则非常简单,只需遵循以下几个基本规则:-XML文档必须包含一个根元素,并且所有的元素必须嵌套在根元素中。

-属性由名称和值组成,名称和值之间用等号连接,并且值必须使用引号或单引号括起来。

3.XML的实例下面是一个简单的XML实例,表示一本书的信息:```xml<book category="fiction"><title>Harry Potter</title><author>J.K. Rowling</author><year>2001</year><price>19.99</price></book>```4.嵌套元素XML允许元素嵌套,即一个元素可以包含另一个元素。

例如,下面是一个表示图书馆中多本书的XML示例:```xml<library><book><title>Harry Potter</title><author>J.K. Rowling</author><year>2001</year><price>19.99</price></book><book><title>The Lord of the Rings</title><author>J.R.R. Tolkien</author><year>1954</year><price>25.99</price></book></library>```在这个例子中,\<library>是根元素,它包含两个\<book>元素,每个\<book>元素表示一本书的信息。

xml格式讲解

xml格式讲解

xml格式讲解XML(eXtensible Markup Language)是一种用于描述和传输数据的标记语言。

它能够通过自定义标签来定义数据的结构和内容。

本文将对XML格式进行详细讲解。

一、XML的基本语法XML采用了类似于HTML的标签语法,但与HTML不同的是,XML标签必须自行定义,且对大小写敏感。

以下是XML的基本语法要点:1. 标签:XML使用尖括号(< >)来定义标签,标签通常成对出现,分为开始标签和结束标签。

例如:<book>...</book>2. 元素(Element):元素由开始标签、结束标签和标签内容组成。

例如:<name>John</name>3. 属性(Attribute):属性为元素提供更多的信息,通常出现在开始标签中。

例如:<book category="novel">...</book>4. 注释:注释用于添加对XML代码的说明,以"<!--"开头,以"-->"结尾。

例如:<!-- This is a comment -->二、XML的文档结构一个合法的XML文档必须包含一个根元素,并且所有的元素都必须严格嵌套。

以下是一个简单的XML文档示例:<?xml version="1.0" encoding="UTF-8"?><library><book><title>《Pride and Prejudice》</title><author>Jane Austen</author></book><book><title>《1984》</title><author>George Orwell</author></book></library>在上述示例中,根元素是"library",它包含了两个子元素"book",并且每个"book"元素分别包含了"title"和"author"元素。

简单xml文件示例

简单xml文件示例

简单xml文件示例摘要:1.XML文件基本概念与结构2.简单XML文件示例解析3.创建和编辑简单XML文件的方法4.XML文件的应用场景和优势5.总结正文:在日常生活中,有许多场景需要用到数据交换和存储,而XML(可扩展标记语言)正是一种广泛应用的数据交换和存储格式。

本文将为您介绍XML文件的基本概念、结构以及一个简单的XML文件示例,同时教您如何创建和编辑XML文件。

1.XML文件基本概念与结构XML是一种基于文本的标记语言,它继承了HTML的基本概念,但比HTML更加灵活和强大。

XML文件由一系列元素组成,每个元素由开始标签、结束标签和中间的内容组成。

开始标签和结束标签之间的内容称为元素内容。

XML文件的结构遵循严格的规则,以确保数据的完整性和一致性。

2.简单XML文件示例解析以下是一个简单的XML文件示例:```xml<?xml version="1.0" encoding="UTF-8"?><学生><姓名>张三</姓名><年龄>20</年龄><性别>男</性别><班级>计算机1班</班级></学生>```在这个示例中,我们定义了一个名为“学生”的根元素,它包含了四个子元素:姓名、年龄、性别和班级。

这些子元素分别代表了学生的相关信息。

3.创建和编辑简单XML文件的方法要创建一个简单的XML文件,您只需要使用文本编辑器(如Notepad、Sublime Text等)或者专门的XML编辑器(如XMLSpy、EditXml等)即可。

在编辑过程中,请注意以下几点:- 文件开头使用`<?xml>`声明,指定XML版本和编码方式。

- 所有标签必须正确闭合,否则XML文件将无法正常解析。

- 标签名称应遵循命名规范,以字母(大小写)开头,后续可添加数字或字母。

XML入门教程

XML入门教程

XML入门教程本教程将向初学者介绍XML的基础知识,包括语法、元素、属性、命名空间、文档类型定义等内容。

1.XML语法:XML使用尖括号(<>)来标记开始和结束,如<element>。

每个XML文档必须有一个根元素,所有其他元素必须嵌套在根元素内。

2.XML元素:XML文档由元素构成,元素由开始标记和结束标记包围,如<element>data</element>。

元素可以嵌套在其他元素中,形成层次结构。

3.XML属性:元素可以包含属性,属性用于为元素提供额外的信息。

属性由名称和值组成,如<element attribute="value">data</element>。

4.XML命名空间:XML命名空间用于解决元素和属性名称冲突的问题。

通过为元素和属性添加命名空间前缀,可以将其归属于特定的命名空间。

例如:<ns:element>。

5.XML文档类型定义(DTD):DTD定义了XML文档的结构和规则。

它可以定义允许的元素、元素顺序、元素类型、元素属性等。

DTD还可以定义实体和符号,用于表示特殊字符和文本片段。

6.XML解析和生成:XML解析是将XML文档解析为可供程序使用的数据结构的过程。

常用的XML解析技术包括DOM(文档对象模型)和SAX(简单API for XML)。

XML生成是将程序数据转换为XML文档的过程,可以使用XML库或编程语言提供的API来生成XML文档。

7.XML相关技术:XML还有许多相关技术,例如XSLT(可扩展样式表语言转换)、XPath(XML路径语言)、XQuery(XML查询语言)和XML Schema(XML模式定义语言)。

这些技术通过增强XML的功能和表达能力,使得XML在数据转换、数据查询和数据验证方面变得更加强大和灵活。

希望这个XML入门教程可以帮助初学者快速上手XML,了解XML的基础知识和相关技术。

xml文件解析流程

xml文件解析流程

xml文件解析流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 读取 XML 文件使用合适的编程语言或工具打开 XML 文件。

解析XML格式数据实例

解析XML格式数据实例

解析XML格式数据实例前言:网络数据传输时,最常用的格式有两种:XML和JSON,下面我们就研究如何使用Pull解析和Sex解析来实现对XML格式文件数据的解析。

实例流程:1.创建服务器:Apache服务器(用于模拟解析网络中的数据)2.在Apache安装目录下的htdocs目录下创建xml格式的文件(用于解析)3.使用Pull方法解析XML数据4.使用SAX方法解析XML数据实例完整步骤:1.创建服务器(可以借鉴这篇博客创建自己的服务器,我就是看这篇的博客)2.在Apache安装目录下的ht docs目录下创建xml格式的文件(用于解析),我创建了get_dat a.xml文件,内容为:<apps> <app> <id>1</id> <name>Google Maps</name> <virsion>1.0</virsion> </app> <app> <id>2</id> <name>Chrome</name> <version>2.1</version> </app> <app> <id>3</id> <name>Google Play</name> <version>2.3</version> </app> </apps>1234567891011121314151617好了,这就是我们需要的准备工作,下面我们来实现使用Pull解析xml格式的数据。

3.使用Pull方法解析XML数据,代码如下:首先是布局文件,添加一个button控件就可以了:<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='/apk/res/android'xmlns:tools='/tools'android:layout_width='match_parent'android:layout_height='match_parent'android:orientation='vertical'tools:context='worktest.MainActivity'><Buttonandroid:id='@ id/send_request_btn'android:layout_width='match_parent'android:layout_height='wrap_content'android:text='send request' /></LinearLayout>1231011121314151617接着我们来修改java代码部分:public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = 'MainActivity'; private Button requestBtn; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(yout.activity_main); bindID(); } private void bindID() { requestBtn = findViewById(R.id.send_request_btn); requestBtn.setOnClickListener(this); } @Override public voidonClick(View v) { switch (v.getId()) { case R.id.send_request_btn: requestWithHttpURLConnection(); break; default: break; } } private void requestWithHttpURLConnection() { new Thread(new Runnable() { @Override public void run() { //这里我使用了OKHttp插件实现访问网络数据,有什么不懂可以看我的前一篇博客 OkHttpClient client = new OkHttpClient(); Request request= new Request.Builder() //这里是将要访问的网络,其中10.0.2.2对Android模拟器来说是计算机本机的IP地址.url('http://10.0.2.2/get_data.xml') .build(); try { final Response response = client.newCall(request).execute(); String responseData = response.body().string(); //调用自定义的parseXMLWithPull()方法实现对XML数据的解析parseXMLWithPull(responseData); } catch (IOException e) { e.printStackTrace(); } } }).start(); } private void parseXMLWithPull(String xmlData) { try { //首先获得XmlPullParserFactory对象 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //获得XmlPullParser对象 XmlPullParser xmlPullParser = factory.newPullParser(); //调用setPut()方法将服务器返回的数据放入xmlPullParser中 xmlPullParser.setInput(new StringReader(xmlData)); //获得当前解析事件int eventType = xmlPullParser.getEventType(); String id = null; String name = null; String version = null; while (eventType != XmlPullParser.END_DOCUMENT) { //获得当前解析事件的当前节点的名字,一个解析事件会有多个节点 String nodeName = xmlPullParser.getName(); switch (eventType) { //我的理解是当前解析事件开始事件 case XmlPullParser.START_TAG: if('id'.equals(nodeName)) { //获得当前节点的名字 id = xmlPullParser.nextText(); } else if ('name'.equals(nodeName)) { name = xmlPullParser.nextText(); } else if ('version'.equals(nodeName)) { version = xmlPullParser.nextText(); } break; //我的理解是当前解析事件结束事件 case XmlPullParser.END_TAG: if ('app'.equals(nodeName)) { //当前解析事件结束,打印出解析的结果Log.e(TAG, 'parseXMLWithPull: ' 'id=' id); Log.e(TAG, 'parseXMLWithPull: ' 'name=' name); Log.e(TAG,'parseXMLWithPull: ' 'version' version); } break; default: break; } //获得下一个解析事件 eventType =xmlPullParser.next(); } } catch (Exception e) { e.printStackTrace(); } } }12345678910111213141516171819202122232425262735 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 8182 83 84 85 86949596979899100over效果展现:4.使用SAX方法解析XML数据1.新建类继承DefaultHandler重写五种方法:public class ContentHandler extends DefaultHandler {private String nodeName;private StringBuilder id;private StringBuilder name;private StringBuilder version;private static final String TAG = 'ContentHandler';//开始xml解析的时候被调用@Overridepublic void startDocument() throws SAXException {super.startDocument();id = new StringBuilder();name = new StringBuilder();version = new StringBuilder();}//开始解析某个节点时被调用@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes);//获取当前节点名nodeName = localName;}//获取当前节点的内容@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);if ('id'.equals(nodeName)){id.append(ch,start,length);}else if('name'.equals(nodeName)){name.append(ch,start,length);}else if('version'.equals(nodeName)){version.append(ch,start,length);}//Log.e(TAG, 'characters: ' 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh' );}//完成解析某个节点时被调用@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);if('app'.equals(localName)){//因为characters()方法可能将一些换行符读入,所以要调用trim()方法Log.e(TAG, 'endElement: ' 'id=' id.toString().trim());Log.e(TAG, 'endElement: ' 'name=' name.toString().trim() );Log.e(TAG, 'endElement: ' 'version=' version.toString().trim() );//不要忘了将stringbuilder清空id.setLength(0);name.setLength(0);version.setLength(0);}}@Overridepublic void endDocument() throws SAXException {super.endDocument();}}4567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556在java代码出调用:e.printStackTrace(); } } }).start(); } private void parseXMLWithSEX(String xmlData) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader = factory.newSAXParser().getXMLReader(); ContentHandler contentHandler = new ContentHandler(); //使用setContentHandler()方法将ContentHandler对象放入xmlReader中xmlReader.setContentHandler(contentHandler); //解析xml数据 xmlReader.parse(new InputSource(newStringReader(xmlData))); } catch (Exception e) { e.printStackTrace(); } } }1234567891011121314151617181920212223242526272829303132333435363738394041424344over,运行效果和之前的一样。

XML轻松学习手册(二)_XML概念

XML轻松学习手册(二)_XML概念

XML轻松学习手册(二):XML概念疯狂代码 / ĵ:http://XMLJiaoCheng/Article20048.html导言 经过第章快速入门学习你已经知道了XML是种能够让你自己创造标识语言它可以将数据和格式从网页中分开它可以储存数据和共享数据特性使得XML无所不能如果你希望深入学习XML系统掌握XML来龙去脉那么我们首先还是要回到XML概念问题上来XML(Extensible Markup Language)种扩展性标识语言\"扩展性\"\"标识\"\"语言\"每个词都明确点明了XML重要特点和功能我们来仔细分析: . 扩展性 2. 标识 3. 语言 4.结构化 5. Meta数据 6. 显示 7. DOM .扩展性---使用XML你可以为你文档建立自己标记(tags) XML第个词是\"扩展性\"这正是XML强大功能和弹性原因 在HTML里有许多固定标记我们必须记住然后使用它们你不能使用HTML规范标准里没有标记而在XML中你能建立任何你需要标记你可以充分发挥你想象力给你文档起些好记标记名称比如你文档里包含些游戏攻略你可以建立个名为<game>标记然后在<game>下再根据游戏类别建立<RPG>,<SLG>等标记只要清晰易于理解你可以建立任何数量标记 开始你也许会不适应我们在学习HTML时有固定标记可以直接学习和使用;(很多人包括我自己都是边分析别人代码和标识边建立自己网页)而XML却没有任何标记可以学也很少有文档标记是模样我们如何办?呵呵没有就自己创建呀旦你真正开始写XML文档你会发现随心所欲创造新标记也是份很有趣事你可以建立有自己特色标记甚至建立你自己HTML语言 扩展性使你有更多选择和强大能力但同时也产生个问题就是你必须学会规划你自己要理解自己文档知道它由哪几部分组成相互的间关系和如何识别它们 有关建立标识还需要介绍说明点标识是描述数据类型或特性比如宽<width>年龄<age>姓名<name>等而不是数据内容比如:<10pxl>,<18>,<张 3>这些都是无用标记如果你学过数据库你可以这样理解标识就是种字段名 2.标识---使用XML你可以识别文档中元素 XML第 2个词是\"标识\"这表明了XML目是标识文档中元素 不论你是HTML,还是XML标识本质在于便于理解如果没有标识你文档在计算机看来只是个很长串每个字看起来都样没有重点的分 通过标识你文档才便于阅读和理解你可以划分段落列明标题XML中你更可以利用其扩展性 来为文档建立更合适标识 不过有点要提醒大家注意:标识仅仅是用来识别信息它本身并不传达信息例如这样HTML代码: <b>frist step<b> 这里<b>表示粗体只用来介绍说明是用粗体来显示\"frist step\"<b>本身并不包含任何实际信息在页面上你看不到<b>真正传达信息是\"frist step \" 3.语言---使用XML你要遵循特定语法来标识你文档 XML第 3个词是\"语言\"这表明了作为种语言XML必须遵循定规则虽然XML扩展性允许你创建新标识但它仍然必须遵循特定结构语法和明确定义 在计算机领域语言常常表示种\"语言\"用来编程实现些功能和应用但不是所有\"语言\"都是用来编程XML就只是种用来定义标识和描述信息语言 下面我们来深入了解下XML应用其本原理可能会很枯燥但是对于整体理解很重要你可以先快速过遍心里有个模糊概念具体精髓则需要在实战中慢慢领会 4.结构化---XML促使文档结构化所有信息按某种关系排列 \"结构化\"听起来太抽象了我们这样理解结构化就是为你文档建立个框架就象写文章先写个提纲结构化使你文档看起来不会杂乱无章每部分都紧密联系形成个整体 结构化有两个原则: 1.每部分(每个元素)都和其他元素有关联关联级数就形成了结构 2.标识本身含义和它描述信息相分离 我们来看个简单例子帮助理解: <?xml version=\"1.0\" encoding=\"GB2312\"?><myfile><title>XML轻松学习手册</title><chapter>XML快速入门<para>什么是XML</para><para>使用XML好处</para></chapter><chapter>XML概念<para>扩展性</para><para>标识</para></chapter></myfile>这是本文XML描述文档可以看到标识分 3级关联,非常清晰:<myfile><chapter><para>...</para></chapter></myfile>上面这样文档结构我们又称的为\"文档树\"主干是父元素如<myfile>分支和页是子元素如<chapter>和<para> 5.Meta数据(Metadata)---专业XML使用者会使用meta数据来工作 在HTML中我们知道可以使用meta标识来定义网页关键字介绍等这些标识不会显示在网页中但可以被搜索引擎搜索到并影响搜索结果排列顺序 XML对这原理进行了深化和扩展用XML你可以描述你信息在哪里你可以通过meta来验证信息执行搜索强制显示或者处理其他数据 下面是些XML metadata在实际应用中用途: 1.可以验证数字签名使在线商务提交动作(submission)有效 2.可以被方便建立索引和进行更有效搜索 3.可以在区别语言的间传输数据 W3C组织正在研究种名为RDF(Resource Description Framework)metadata处理思路方法可以自动交换信息W3C宣称使用RDF配合数字签名将使网络中存在\"真实可信\"电子商务 6.显示 单独用XMl不能显示页面我们使用格式化技术比如CSS或者XSL才能显示XML标记创建文档 我们在前面第章讲到XML是将数据和格式分离XML文档本身不知道如何来显示必须有辅助文件来帮助实现(XML取消了所有标识包括font,color,p等风格样式定义标识因此XML全部是采用类似DHTML中CSS思路方法来定义文档风格样式)XML中用来设定显示风格样式文件类型有: 1.XSL XSL全称是Extensible Stylesheet Language(可扩展样式语言), 是将来设计XML文档显示样式主要文件类型它本身也是基于XML语言使用XSL你可以灵活设置文档显示样式文档将自动适应任何浏览器和PDA(掌上电脑) XSL也可以将XML转化为HTML那样老浏览器也可以浏览XML文档了 2.CSS CSS大家很熟悉了全称是Cascading Style Sheets(层叠样式表)是目前用来在浏览器上显示XML文档主要思路方法 3.BehaviorsBehaviors现在还没有成为标准它是微软IE浏览器特有功能用它可以对XML标识设定些有趣动作 7.DOMDOM全称是document object model(文档对象模型)DOM是用来干什么呢?假设把你文档看成个单独对象DOM就是如何用HTML或者XML对这个对象进行操作和控制标准 面向对象思想思路方法已经非常流行了在编程语言(例如javajs)中都运用面向对象编程思想在XML中就是要将网页也作为个对象来操作和控制我们可以建立自己对象和模板和对象进行交流如何命令对象就要用到APIAPI全称Application Programming Interface它是访问和操作对象规则而DOM就是种详细描述HTML/XML文档对象规则API它规定了HTML/XML文档对象命名协定模型沟通规则等在XML文档中我们可以将每个标识元素看作个对象---它有自己名称和属性 XML创建了标识而DOM作用就是告诉script如何在浏览器窗口中操作和显示这些标识 上面我们已经简要讲述了些XML基本原理我们来看看它们的间关联以及它们是如何工作先看这里张图:>1.XML描述数据类型例如:\"King le[1][2]下页2009-2-12 5:09:04疯狂代码 /。

C#XML解析方式实例解析(带命名空间的)

C#XML解析方式实例解析(带命名空间的)

C#XML解析⽅式实例解析(带命名空间的)C# XML解析通过XPath的⽅式的步骤:1、需要先加载⽂档,然后再读取想要的节点值。

◆xml⽂档protected XmlDocument doc = null;◆xml⽂档的根元素(节点)protected XmlElement root = null;◆xml⽂档的名空间管理器protected XmlNamespaceManager nsmgr = null;2、接下来就是加载⽂档了1. protected void LoadXmlFile(FileInfo xmlFile)2. {3. if (xmlFile == null || !xmlFile.Exists)4. {5. throw new FileNotFoundException(6. string.Format("要解析的⽂件不存在{0}。

",7. xmlFile.FullName));8. }9. //加载⽂件10. this.doc = new XmlDocument();11. doc.Load(xmlFile.FullName);12. //准备读取⽂件13. root = doc.DocumentElement;14. string nameSpace = spaceURI;15. nsmgr = new XmlNamespaceManager(Table);16. nsmgr.AddNamespace("ns", nameSpace);17. }◆C# XML解析通过XPath的⽅式要注意。

a、这两⾏是取得xml⽂档的名空间1. root = doc.DocumentElement;2. string nameSpace = spaceURI;b、这两⾏是建⽴xml⽂档的名空间管理器1. nsmgr = new XmlNamespaceManager(Table);2. nsmgr.AddNamespace("ns", nameSpace);如果你的xml⽂档有名空间,则这部分的代码是必不可少的。

xml多线程解析,简单易懂的例子

xml多线程解析,简单易懂的例子

xml多线程解析,简单易懂的例⼦抽空讲⼀下以前做的xml解析,⾃⼰的⼯作先扔⼀边吧!先看看要解析的数据格式<?xml version='1.0' encoding='UTF-8'?><chats><chat><speaker><![CDATA[self]]></speaker><text><![CDATA[hello]]></text></chat><chat><speaker><![CDATA[other]]></speaker><text><![CDATA[world]]></text></chat><chat><speaker><![CDATA[other1]]></speaker><text><![CDATA[world1]]></text></chat><chat><speaker><![CDATA[other1]]></speaker><text><![CDATA[world1]]></text></chat><chat><speaker><![CDATA[other2]]></speaker><text><![CDATA[world2]]></text></chat><chat><speaker><![CDATA[other3]]></speaker><text><![CDATA[world3]]></text></chat><chat><speaker><![CDATA[other4]]></speaker><text><![CDATA[world4]]></text></chat><chat><speaker><![CDATA[other5]]></speaker><text><![CDATA[world5]]></text></chat></chats>把它放在了⼀个叫chatLog.xml的⽂件中,再拖到⼯程⾥⾯来这个解析只需要⼀个类就够了,下⾯来看看头⽂件#import <UIKit/UIKit.h>@interface xmlParseViewController : UIViewController<NSXMLParserDelegate> {//注意要添加代理!!!NSMutableArray *chatArray;NSString *chatFile;NSMutableDictionary *currentChatInfo;NSMutableString *currentString;BOOL storingCharacters;IBOutlet UITableView *table;}@end下⾯来看看.m⽂件#import"xmlParseViewController.h"@implementation xmlParseViewControllerstatic NSString *kName_Chats = @"chats";static NSString *kName_Chat = @"chat";static NSString *kName_Speaker = @"speaker";static NSString *kName_Text = @"text";- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:kName_Chats]) {[chatArray removeAllObjects];//开始之前先将数组元素移除} else if ([elementName isEqualToString:kName_Chat]) {[currentChatInfo removeAllObjects];//字典元素也要移除} else if ([elementName isEqualToString:kName_Speaker] ||[elementName isEqualToString:kName_Text]) {[currentString setString:@""];//将数组也置为空,注意写法storingCharacters = YES;//此处开始解析}}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {if ([elementName isEqualToString:kName_Chats]) {//这⾥什么也不做} else if ([elementName isEqualToString:kName_Chat]) {[chatArray addObject:[NSDictionary dictionaryWithDictionary:currentChatInfo]];//把字典添加进数组} else if ([elementName isEqualToString:kName_Speaker] || [elementName isEqualToString:kName_Text]) {[currentChatInfo setObject:[NSString stringWithString:currentString] forKey:elementName];//把字符串添加进字典}storingCharacters = NO;//关闭解析}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {if (storingCharacters) [currentString appendString:string];//把解析出来的字符串添加到实例变量字符串}- (void)viewDidLoad {[super viewDidLoad];NSString *path=[[NSBundle mainBundle] pathForResource:@"chatLog" ofType:@"xml"];currentString = [[NSMutableString alloc] initWithCapacity:0];currentChatInfo = [[NSMutableDictionary alloc] initWithCapacity:2];chatArray = [[NSMutableArray alloc] initWithCapacity:0];[NSThread detachNewThreadSelector:@selector(loadThread:) toTarget:self withObject:path];//在这⾥新开了⼀个线程去加载⽂件,⼀般加载⽂件或下载都采⽤多线程的⽅式}- (void) finshLoadFile {UITableView *tableView = (UITableView *)table;[tableView reloadData];}- (void) loadThread:(NSString *)xmlFile {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];NSXMLParser *chatLogParser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:xmlFile]];[chatLogParser setDelegate:self];//千万别忘了设置代理[currentString setString:@""];[currentChatInfo removeAllObjects];[chatLogParser parse];[chatLogParser release];[self performSelectorOnMainThread:@selector(finshLoadFile) withObject:nil waitUntilDone:YES];[pool release];}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return [chatArray count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString *CellIdentifier = @"Cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];cell.backgroundColor = [UIColor colorWithRed:0.859f green:0.886f blue:0.929f alpha:1.0f];cell.selectionStyle = UITableViewCellSelectionStyleNone;}NSDictionary *chatInfo = [chatArray objectAtIndex:[indexPath row]];cell.textLabel.text = [chatInfo objectForKey:@"text"];cell.detailTextLabel.text = [chatInfo objectForKey:@"speaker"];return cell;}- (void)dealloc {[currentString release];[currentChatInfo release];[chatArray release];[super dealloc];}@end说明⼀下,其实解析⽤到的函数只有三个,分别是- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict; - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;他们的作⽤分别是开始解析元素,结束解析元素和得到元素。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()。

相关文档
最新文档