189 8069 5689

android的xml,android的xml编译到指定位置

android里的XML文件是用什么写的?

XML (eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。 XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。 XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式。 XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

成都创新互联是一家专注于网站设计制作、网站设计与策划设计,德江网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:德江等地区。德江做网站价格咨询:18980820575

android中XML文件是如何解析成View

简要概述

关于视图的解析过程。大概原理就是通过Layout Inf later的inflate方法,将一个xml布局文档用pull递归解析。然后判断标签,如果是merge,include等特殊处理。如果是view或者view group,就通过xml的tag找到指定类,反射new出来,然后add到parent。这里值得一提的是,为了抑制反射造成的效率损失,对反射出来的constructor做了一个map静态缓存,下次遇到了同名tag就不用反射了另外,xml从文件中预编译获取xml parser的过程也很复杂,在AssetManager有大量缓存(比如相同id的layout只获取一次,缓存xml block)与native方法,都是为了保证效率。

Android中LayoutInflate解析xml布局文件生成View树的过程

Android XML布局与View之间的转换

什么是xml,什么android的xml,android的xml文件有什么用?

xml 全名可扩展标记语言。和html文件差不多。

在android中经常来编写应用的UI界面

列如:

在UI中就是这个样子:

android里面怎么解析xml

Android解析xml文件总共有三种方法,分别是:

SAX解析XML文件: SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。如下代码:

public static ListPerson readXML(InputStream inStream) {

try {

//创建解析器

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser saxParser = spf.newSAXParser();

//设置解析器的相关特性,true表示开启命名空间特性

saxParser.setProperty("",true);

XMLContentHandler handler = new XMLContentHandler();

saxParser.parse(inStream, handler);

inStream.close();

return handler.getPersons();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//SAX类:DefaultHandler,它实现了ContentHandler接口。在实现的时候,只需要继承该类,重载相应的方法即可。

public class XMLContentHandler extends DefaultHandler {

private ListPerson persons = null;

private Person currentPerson;

private String tagName = null;//当前解析的元素标签

public ListPerson getPersons() {

return persons;

}

//接收文档开始的通知。当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。

@Override

public void startDocument() throws SAXException {

persons = new ArrayListPerson();

}

//接收元素开始的通知。当读到一个开始标签的时候,会触发这个方法。其中namespaceURI表示元素的命名空间;

//localName表示元素的本地名称(不带前缀);qName表示元素的限定名(带前缀);atts 表示元素的属性集合

@Override

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {

if(localName.equals("person")){

currentPerson = new Person();

currentPerson.setId(Integer.parseInt(atts.getValue("id")));

}

this.tagName = localName;

}

//接收字符数据的通知。该方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,

//后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

if(tagName!=null){

String data = new String(ch, start, length);

if(tagName.equals("name")){

this.currentPerson.setName(data);

}else if(tagName.equals("age")){

this.currentPerson.setAge(Short.parseShort(data));

}

}

}

//接收文档的结尾的通知。在遇到结束标签的时候,调用这个方法。其中,uri表示元素的命名空间;

//localName表示元素的本地名称(不带前缀);name表示元素的限定名(带前缀)

@Override

public void endElement(String uri, String localName, String name) throws SAXException {

if(localName.equals("person")){

persons.add(currentPerson);

currentPerson = null;

}

this.tagName = null;

}

}

DOM解析XML文件:  DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。

Pull解析器解析XML文件:    Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值

android中使用哪种方式解析XML比较好

PULL解析器,因为SAX解析器操作起来太笨重,DOM不适合文档较大,内存较小的场景,唯有PULL轻巧灵活,速度快,占用内存小,使用非常顺手。

在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面一一详细介绍。

1、SAX解析器:

SAX(Simple

API

for

XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。

SAX解析器的优点是解析速度快,占用内存少。非常适合在Android移动设备中使用。

2、DOM解析器:

DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM

API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。

由于DOM在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源。

3、PULL解析器:

PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器。

android.XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束,其本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,而且可以为XML承载的数据定义类型,约束能力较之DTD更强大。对XML的解析主要有DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java 6中引入的新的解析XML的方式,Streaming API for XML),其中DOM处理大型文件时其性能下降的非常厉害,这个问题是由DOM树结构占用的内存较多造成的,而且DOM解析方式必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(典型的用空间换取时间的策略);SAX是事件驱动型的XML解析方式,它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过事件回调代码来处理XML文件,适合对XML的顺序访问;顾名思义,StAX把重点放在流上,实际上StAX与其他解析方式的本质区别就在于应用程序能够把XML作为一个事件流来处理。将XML作为一组事件来处理的想法并不新颖(SAX就是这样做的),但不同之处在于StAX允许应用程序代码把这些事件逐个拉出来,而不用提供在解析器方便时从解析器中接收事件的处理程序。


文章标题:android的xml,android的xml编译到指定位置
网站路径:http://cdxtjz.cn/article/dsdssgo.html

其他资讯