android 中对xml 进行解析

合集下载

AndroidManifest.xml文件详解

AndroidManifest.xml文件详解

AndroidManifest.xml⽂件详解AndroidManifest.xml⽂件详解(⼀)每个应⽤程序在它的根⽬录中都必须要有⼀个AndroidManifest.xml⽂件。

这个清单把应⽤程序的基本信息提交给Android系统,在应⽤程序的代码能够运⾏之前,这个信息系统必须建⽴。

以下是清单⽂件要做的⼀些事情:1. ⽤Java包给应⽤程序命名。

这个包名是应⽤程序的唯⼀标识;2. 描述应⽤程序的组件---组成应⽤程序的Activity、Service、Broadcast Receiver以及Content Provider。

它要⽤每个组件的实现类来命名,并向外发布对应组件功能(例如,组件所能处理的Intent消息)。

这些声明会让Android系统了解应⽤程序中组件,以及这些组件被加载的条件。

3. 判断哪些进程是主应⽤程序组件。

4. 声明应⽤程序所必须的权限,以便能够访问被保护的API,以及能够跟其他应⽤程序进⾏交互。

5. 为了跟应⽤程序组件进⾏交互,还声明了其他要求有的权限。

6. 列出了能够提供应⽤程序运⾏时的分析和其他信息的Instrumentation类。

只有在开发和测试应⽤程序时才在清单⽂件中声明这些类,在应⽤程序被发布之前,要删除这些类。

7. 声明应⽤程序所要求的最⼩的Android API级别。

8. 列出应⽤程序必须链接的外部库。

Manifest⽂件的结构下图中包含了清单⽂件的⼀般性结构,并且包含所有能包含的元素。

每个元素所带有的全部元素会在它们各⾃的⽂档中介绍。

<?xml version="1.0" encoding="utf-8"?>. . .. . .. . .以下按字母顺序列出了清单⽂件中的所有元素,这些元素时Android系统法定元素,不能添加⾃定义的元素或属性。

AndroidManifest.xml⽂件详解(⼆)⽂件约定某些约定和规则普遍适⽤于清单中的所有元素和属性:元素只⽤<manifest>和<application>元素时必须的,⽽且这两个元素在⽂件中只能出现⼀次。

Android利用Document实现xml读取和写入操作

Android利用Document实现xml读取和写入操作

Android利⽤Document实现xml读取和写⼊操作本⽂实例为⼤家分享了利⽤Document实现xml读取和写⼊操作,供⼤家参考,具体内容如下⾸先先来介绍⼀下什么xml?xml是可扩展标记语⾔,他可以⽤来标记数据,定义数据类型。

是⼀种允许⽤户对⾃⼰标记语⾔进⾏定义的源语⾔。

解析XML⽂件的⽅法有很多⽅法:dom解析,就是document以及PULL和SAX⽅法。

今天给⼤家分享⼀下如何⽤Document来操作XML。

效果图:⾸先先对布局⽂件进⾏操作:activity_main.xml:<?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="com.oak.d3_xml.MainActivity"><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="⽣成"android:id="@+id/bt_create"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="读取"android:id="@+id/bt_read"/></LinearLayout>主代码:MainActivity.java: 值得注意的是Document类中的包要导W3C的包package com.oak.d3_xml;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;public class MainActivity extends AppCompatActivity {private TextView textView;//⽤于展⽰读取xml的内容private Button bt_create;//⽤于创建xml⽂件private Button bt_read;//⽤于读取xml⽂件private File file;//xml⽂件路径@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);file = new File(getFilesDir(),"languages.xml");//获取到xml⽂件textView = (TextView) findViewById();//拿到textView控件bt_create = (Button) findViewById(R.id.bt_create);//拿到创建按钮bt_read = (Button) findViewById(R.id.bt_read);//拿到读取按钮bt_create.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//这⾥利⽤的是dom对xml进⾏操作的//实例化⼀个DocmentBuilderFactory,调⽤其静态⽅法获取DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();try {//实例化⼀个DocumentBuilderDocumentBuilder builder = builderFactory.newDocumentBuilder();//实例化⼀个xml⽂件Document newxml = builder.newDocument();//创建⼀个根标签Element languages = newxml.createElement("languages");//为其设置属性languages.setAttribute("cat","it");//for循坏3次,分别创建出三个标签,每个标签都包含内容for (int i=0;i<3;i++){//创建languages的⼦标签lanElement lan = newxml.createElement("lan");//设置属性lan.setAttribute("id",i+"");//创建lan的⼦标签Element name = newxml.createElement("name");//设置内容name.setTextContent("Java"+i);//创建lan的⼦标签Element ide = newxml.createElement("ide");//设置内容ide.setTextContent("Eclipse"+i);//将name和ide分别加⼊lan这个标签中lan.appendChild(name);lan.appendChild(ide);//将lan将⼊languages标签中languages.appendChild(lan);}//将languages加⼊到xml⽂件中newxml.appendChild(languages);//实例化Transformer⼯⼚TransformerFactory transformerFactory = TransformerFactory.newInstance();//获取到TransformerTransformer transformer = transformerFactory.newTransformer();//设置输出格式transformer.setOutputProperty("encoding","UTF-8");//设置输出流OutputStream os = new FileOutputStream(file);//将⽂件写出transformer.transform(new DOMSource(newxml),new StreamResult(os));Toast.makeText(getApplicationContext(),"⽣成成功",Toast.LENGTH_SHORT).show(); } catch (ParserConfigurationException e) {e.printStackTrace();} catch (TransformerConfigurationException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (TransformerException e) {e.printStackTrace();}}});bt_read.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//获取到DocumentBuilder的⼯⼚实例化DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();try {//拿到DocumentBuilderDocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml⽂件Document xml = builder.parse(file);//获取其根标签Element languages = xml.getDocumentElement();//根据⼦标签进⾏查找,返回的是⼀个list集合NodeList list = languages.getElementsByTagName("lan");textView.setText("");//将textView中的内容置空for (int i=0; i<list.getLength(); i++){//获取到⼦标签lanElement lan = (Element) list.item(i);//获取到他的属性String id = lan.getAttribute("id");//获取到他的⼦标签name的内容String name = lan.getElementsByTagName("name").item(0).getTextContent();//获取到他的⼦标签ide的内容String ide = lan.getElementsByTagName("ide").item(0).getTextContent();//显⽰到textView中textView.append(id+"\n"+name+"\n"+ide+"\n");}} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}});}}到这⾥利⽤Document来操作XML⽂件就完成了。

在Android手机应用软件开发中XML的使用技巧

在Android手机应用软件开发中XML的使用技巧

XML的全称是eXtensible Markup Language ,即可扩展标记语言,作为一种广泛推广的数据传输的标准手段,在Ajax设想之初就被确定为XMLHttpRequest传输数据的方式,了解XML技术的本质对于我们更好地运用Ajax也是很有意义的。

对于所熟悉的超文本标记语言,XML也是一种类似的标记语言,不同的是,在HTML的标记是在标准中已经规定了有些什么标记,各种标记代表什么意义,如<p>代表一个段落,它控制着文档在浏览器中应该如何显示;而在XML中,标记以及标记的值是由我们自己定义的,但是,XML不像HTML那样会控制浏览器的显示,它其实只是用来封装数据,并不关心界面的显示如何,实际上我们最后控制界面的显示还是由HTML来控制的,在很长一段时间内我们还是会使用HTML来展示数据,而XML提供了一种可以使页面显示与数据分离的方法,这样为我们面向对象的模块化编程提供了方便。

下面是一段XML文档。

看到我们为文档的根节点定义为person,之下有name、sex、age三个子节点,从这一点可以看出,我们定义了一个XML文档之后,通过对文档标签的自定义,可以得到一个很具结构化并具有一定意义的数据文档,这为我们提供了一种很便捷的方式来包裹和交换数据。

在使用XMLHttpRequest发出请求以后,在服务端可以使程序返回一个XML文档,然后在前端脚本中解析XML,并使用DOM方法改变界面显示。

JSON:它的名字看起来似乎很亲切,全称为JavaScript Object Notation,可以看出它和JavaScript 的关系非常密切。

JSON是一种与JavaScript自然匹配的对象,它实际上是一种名称与值的集合,我们使用JavaScript中通常的对象访问方法就能对对象进行访问。

通过大括号、冒号、逗号、引号等符号实例了一个JSON对象,每个冒号左边的是键,右边是值,JSON 对象实际上就是一个键值对的集合。

利用 XMLPullParser 进行XML 数据解析和处理

利用 XMLPullParser 进行XML 数据解析和处理

利用 XMLPullParser 进行XML 数据解析和处理使用XMLPullParser进行XML数据解析和处理XMLPullParser是一种在Android平台上常用的用于解析和处理XML数据的工具。

它具有快速、高效的特点,能够准确地解析XML 文档,并提供了灵活的API来处理解析结果。

本文将介绍如何利用XMLPullParser进行XML数据解析和处理。

一、XML数据解析的概念和原理XML数据解析是指将XML文档中的数据提取出来并进行处理的过程。

XML文档是一种标记语言,用于描述结构化的数据。

XML数据解析的过程可以分为以下几个步骤:1. 创建XMLPullParser对象:首先,需要创建一个XMLPullParser 对象,用于解析XML文档。

2. 设置输入源:在进行XML数据解析之前,需要设置XMLPullParser的输入源。

输入源可以是一个文件、一个输入流或者一个URL。

3. 解析XML文档:通过调用XMLPullParser对象的相应方法,可以逐行解析XML文档,获取XML文档中的节点信息和数据。

4. 处理解析结果:根据XML数据的结构和需要,可以使用条件语句、循环结构等方式对解析结果进行处理,提取所需的数据,并进行后续的操作。

二、利用XMLPullParser进行XML数据解析的步骤下面逐步介绍如何使用XMLPullParser进行XML数据解析和处理的具体步骤。

步骤1:导入相关的类和包在使用XMLPullParser进行XML数据解析之前,需要导入相应的类和包。

具体的导入语句如下:import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.InputStream;步骤2:创建XMLPullParser对象需要通过XmlPullParserFactory类的newInstance()方法创建XmlPullParserFactory对象,并通过XmlPullParserFactory对象的newPullParser()方法创建XMLPullParser对象,示例代码如下:XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser parser = factory.newPullParser();步骤3:设置输入源设置XMLPullParser对象的输入源,可以是一个输入流、一个文件或者一个URL。

Android SAX 方式解析XML 字符串

Android SAX 方式解析XML 字符串

这个是主类:import java.io.StringReader;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.XMLReader;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class ParsingXML extends Activity {private final String MY_DEBUG_TAG = "WeatherForcaster";public void onCreate(Bundle icicle) {super.onCreate(icicle);TextView tv = new TextView(this);String xml = "<VCOM version='1.1'><loginlink>aHR0cDovLzE5Mi4xNjguMTA0LjExMy9ldW1zL2NsaWV udC90ZW1 wbGF0ZTIwMDA vbW9iaWxlZW50cnkucGhwP3VzZXJuYW1lPWNlc2hp</loginlink><errmsg ></errmsg></VCOM>";// 创建一个新的字符串StringReader read = new StringReader(xml);// 创建新的输入源SAX 解析器将使用InputSource 对象来确定如何读取XML 输入InputSource source = new InputSource(read);try {SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();XMLReader xr = sp.getXMLReader();ExampleHandler myExampleHandler = new ExampleHandler();xr.setContentHandler(myExampleHandler);xr.parse(source);ParsedExampleDataSet parsedExampleDataSet = myExampleHandler.getParsedData();String url=Base64Coder.decodeString(parsedExampleDataSet.toString());tv.setText(url);} catch (Exception e) {tv.setText("Error: " + e.getMessage());Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);}this.setContentView(tv);}}下面两个类是以SPX 方式解析XML字符串import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class ExampleHandler extends DefaultHandler{private boolean in_mytag = false;private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();public ParsedExampleDataSet getParsedData() {return this.myParsedExampleDataSet;}public void startDocument() throws SAXException {this.myParsedExampleDataSet = new ParsedExampleDataSet();}public void endDocument() throws SAXException {}public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException {if (localName.equals("loginlink")) {this.in_mytag = true;}}public void endElement(String namespaceURI, String localName, String qName) throws SAXException {if (localName.equals("loginlink")) {this.in_mytag = false;}}public void characters(char ch[], int start, int length) {if(this.in_mytag){myParsedExampleDataSet.setExtractedString(new String(ch, start, length));}}}public class ParsedExampleDataSet {private String extractedString = null;public String getExtractedString() {return extractedString;}public void setExtractedString(String extractedString) { this.extractedString = extractedString;}public String toString(){return "ExtractedString = " + this.extractedString ;}}。

AndroidXML布局属性详解

AndroidXML布局属性详解

各种Layout用到的一些重要的属性:第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layout_centerInparent 相对于父元素完全居中android:layout_alignParentBottom 贴紧父元素的下边缘android:layout_alignParentLeft 贴紧父元素的左边缘android:layout_alignParentRight 贴紧父元素的右边缘android:layout_alignParentTop 贴紧父元素的上边缘android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物第二类:属性值必须为id的引用名“@id/id-name”android:layout_below 在某元素的下方android:layout_above 在某元素的的上方android:layout_toLeftOf 在某元素的左边android:layout_toRightOf 在某元素的右边android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐第三类:属性值为具体的像素值,如30dip,40pxandroid:layout_marginBottom 离某元素底边缘的距离android:layout_marginLeft 离某元素左边缘的距离android:layout_marginRight 离某元素右边缘的距离android:layout_marginTop 离某元素上边缘的距离EditText的android:hint设置EditText为空时输入框内的提示信息。

android android读取资源文件的方法

android android读取资源文件的方法

android android读取资源文件的方法Android开发中,我们经常需要读取应用程序中的资源文件,如图片、文字、xml等。

Android提供了一套API供我们方便地读取这些资源文件。

本文将介绍几种读取资源文件的方法。

一、读取图片资源文件1.通过资源ID读取图片资源在我们的应用程序中,通常会将图片存放在res/drawable文件夹下。

我们可以通过资源ID来获取这些图片。

```ImageView imageView = findViewById(R.id.imageView);imageView.setImageResource(R.drawable.my_image);```其中,R.drawable.my_image是图片资源文件的ID。

通过调用setImageResource方法,我们可以将该资源文件设置给ImageView。

2.通过文件名读取图片资源有时候,我们可能需要根据文件名来读取图片资源。

可以使用以下方法来实现:```String fileName = "my_image.png";Resources resources = getResources();int resId = resources.getIdentifier(fileName, "drawable", getPackageName());imageView.setImageResource(resId);```首先,我们需要获取Resources对象,然后调用getIdentifier方法,传入文件名、资源类型和包名,最后获取到资源ID。

接下来,就可以通过setImageResource方法将资源文件设置给ImageView。

二、读取文字资源文件在应用程序中,我们可能需要读取文字资源文件,如strings.xml。

可以使用以下方法来读取:```String textValue =getResources().getString(R.string.my_text);textView.setText(textValue);```其中,R.string.my_text是文字资源文件的ID。

Android中的动画(XML方式)实践(逐帧动画与补间动画)

Android中的动画(XML方式)实践(逐帧动画与补间动画)

Android中的动画(XML方式)实践(逐帧动画与补间动画)属性动画。

逐帧动画:基于单元格的动画,每一帧显示一个不同的drawable。

一帧一帧的顺序播放。

补间动画:补间动画应用于view,通过对其位置,大小,旋转和透明度的改变,让view动起来。

属性动画:属性动画几乎可以让应用程序中任何对象动起来。

所有补间动画的内容,都可以通过属性动画实现。

下面逐一介绍:注:这篇文章偏重于以xml方式实现相应动画效果。

逐帧动画逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧一帧的播放图片,类似卡通动画。

目标:实现如下图效果:loading步骤:1.在res/drawable目录下新建loading_frame.xml文件:loading_frame.xml根节点是animation-list,内部由一到多个<item>节点组成oneshot属性表示是否只播放一次(true:一次;false:循环播放).item节点声明是一个动画帧,其中 android:drawable属性定义要显示的图像,android:druation代表此帧持续的时间,毫秒为单位。

注:在AndroidStudio中强制规定带animation-list节点xml文件必须放在res/drawable文件下(eclipse(ADT)貌似支持任意放res/drawable和res/anim)。

在androidStudio中若放在res/anim下会报错:错误提示:1错误提示:22.新建页面布局activity_frame.xml:如上图布局很简单上面一个imageview,下面两个button,都水平居中(相对于parent)。

3.新建FrameActivityframeActivity主要逻辑代码当然为了避免animationDrawable带来的内存泄露,建议在onDestroy方法中做如下操作:onDestroy注意:帧数比较多的动画不建议用逐帧动画实现,其一会显得卡顿,其二容易引起OOM。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成的。

这个在内存中的文档树将是文档实际大小的几倍。

这样做的好处是结构清除、操作方便,而带来的麻烦就是极其耗费系统资源。

而SAX正好克服了DOM的缺点,分析能够立即开始,而不是等待所有的数据被处理。

而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档来说是个巨大的优点。

事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

选择DOM 还是选择SAX,这取决于下面几个因素:应用程序的目的:如果打算对数据作出更改并将它输出为XML,那么在大多数情况下,DOM 是适当的选择。

并不是说使用SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。

数据容量:对于大型文件,SAX 是更好的选择。

数据将如何使用:如果只有数据中的少量部分会被使用,那么使用SAX 来将该部分数据提取到应用程序中可能更好。

另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么SAX 也许不是恰当的选择。

对速度的需要:SAX 实现通常要比DOM 实现更快。

基于上面的分析,在基于Android系统的内存和CPU资源比较有限的手持设备上,只要我们不需要修改XML数据或者随机的访问XML数据,SAX尽管可能需要更多的编码工作,但是为了更小的内存和CPU 消耗,还是值得的。

另外,Android SDK中已经包含了JAXP对应的javax.xml.parsers包,和SAX对应org.xml.sax(当然DOM对应的org.w3c.dom包也包含在内),加上Android还提供了android.sax这样的包来方便SAX Handle的开发,基于JAXP和SAX这样的标准方法来开发不仅复杂度不高,即使出现问题在讨论组中寻求解决方案也是比较容易的。

android 中的xml解析应该是和java中一条道路主要分为sax 解析和的Dom 解析。

如下的介绍的相关的包和类均为android 环境下:sax解析对应为:org\xml\sax 包:xml解析javax.xml.parsers.SAXParserFactoryjavax.xml.parsers.SAXParser两个主要用于SAXParser的上下文建立示例如下:SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();ParseXML parX = new ParseXML();parser.parse("F:\\emps.xml", parX);这里的ParseXML 一般是继承于org.xml.sax.helpers.DefaultHandler类的解析实现。

因为Sax 对xml的解析是基于事件类型的,也就是Sax Parser逐步的读取xml文件,然后碰到一个节点,一个属性,碰到一个节点的结束等事件都会回调哦org.xml.sax.helpers.DefaultHandler 之类的实现,然后在Hander 的实现中具体解析各个节点名称,属性名称。

通过以上的特点可以看出sax有速度快(不需要全部的读入内存并构建树),消耗的内存较少,线性的从上往下解析,所以它比较的适合于xml文件大,速度要求高,解析结构自上而下如把html展示出来,xml转为html等。

Dom解析对应为:org\w3c\dom包:xml的各个元素对应类javax.xml.parsers.DocumentBuilderFactoryjavax.xml.parsers.DocumentBuilder结构也和sax 一样,最终的解析目标指向org.w3c.dom.Document.示例如下:File docFile = new File("orders.xml");Document doc = null;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();doc = db.parse(docFile); // get the document.因为Dom 是基于树结构,所以要全部结构内容读入内容,构造树,所以比较花费时间,但是dom 的操作可以反复的来回操作,灵活性比较高,做出的程序结构也比较容易认可,对于那些性能要求不是很高的,内容比较少的,xml上下结构比较复杂的用dom应该是比较好的选择了。

因为在开发中,我们会常用到xml文件的读写操作,因为手机操作有很多版本问题和很多小数据在数据库不是良好的解决方案。

所以会用到很多xml操作。

android开发一般对xml操作常用三种技术:sax、dom、pull分别详细的进行介绍:首先创建开发测试坏境(一下三种方法都会使用这个环境):在类路径下面创建xml文件:person.xml<?xml version="1.0" encoding="UTF-8"?><persons><person id="1"><name>王昌龙</name><age>23</age></person><person id="3"><name>小妾</name><age>17</age></person></persons>(我的名字and因为没有媳妇,就假设叫小妾)针对person创建javabean,(因为我们下面要以对象的形式获取此xml文件内容)package cn.partner4java.xml.bean;public class Person {private int id;private String name;private short age;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 short getAge() {return age;}public void setAge(short age) {this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + id;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (id != other.id)return false;return true;}}sax:SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。

SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。

所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。

下面是一些ContentHandler接口常用的方法:startDocument()当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。

endDocument()和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。

startElement(String namespaceURI, String localName, String qName, Attributes atts)当读到一个开始标签的时候,会触发这个方法。

namespaceURI就是命名空间,localName 是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。

通过atts可以得到所有的属性名和相应的值。

要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。

这使得SAX 在编程处理上没有DOM来得那么方便。

endElement(String uri, String localName, String name)这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。

characters(char[] ch, int start, int length)这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。

不知道你看懂上面的解释了么?那好,我们动手做一下:创建XMLContentHandler,如上面说的应该实现ContentHandler接口,但是我们这里去集成一个它的实现类就OL,package cn.partner4java.sax.service;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import cn.partner4java.sax.bean.Person;public class XMLContentHandler extends DefaultHandler {private List<Person> persons;private Person person;private String preTag;public List<Person> getPersons() {return persons;}//这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,//使用new String(ch,start,length)就可以获取内容。

相关文档
最新文档