- 相关推荐
XML的重要性
为什么XML很重要?
为什么XML很重要?在Web上一条很重要的原则是:内容是一个网站最为首要的东西。但不幸的是,内容总是同如何将他们显示出来这个方面联系在一起的。你在浏览网页的时候,有多少次看到一个小小的标签,上面写着“最好在800*600解析度下浏览本网站”呢?数不胜数吧!XML将有助于解决这个问题。因为在XML中,网站建设者不再是指定在网页的什么地方显示什么东西,他们需要做的是定义好一个文档的结构。例如,你需要定义的是文档的标题,作者,一系列相关链接等等。任何装备有XML 浏览器的设备??一个掌上电脑,或者是电视机顶盒,或者是一个高性能的工作站等等??就能够把XML文档的内容根据各个设备的显示特性显示出来。或许XML最强的特性,在于其内在的可扩展性。任何的公司和组织都能够扩展XML 来实现新的应用。现在在互联网上几乎每天都有关于XML的应用方案的提出。一些基于XML的语言www.diannao114.cn已经开始被使用,像微软的频道定义格式??还有一些正在被开发之中,包括Resource Definition Format(资源定义格式)和Open Software Description(开放式软件描叙)等等。XML还很有可能成为数据和文档交换机制的标准。例如,可以用XML来实现在Internet上不同数据库之间的信息交换。到现在为止,要准确的说明XML的公用似乎还为时过早。但是它所带来的可能性是无限的,或许这就是为什么XML能够在其初期就能够如此引人关注的原因吧。
什么是XML?列举一下你所了解的XML技术及其应用
什么是XML?列举一下你所了解的XML技术及其应用
答:XML即可扩展标记语言。eXtensibleMarkupLanguage.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记www.diannao114.cn,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。
Android 创建与解析XML(一)—— 概述Android 创建与解析XML(一)—— 概述
Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器、解析器、转换器 API,对 XML 进行解析和转换。
XML,相关有DOM、SAX、JDOM、DOM4J、Xerces、JAXP等一堆概念,但是很多人总是会弄混他们之间的关系,这对我们理解XML文件的创建和解析很不利。要挑选一个适合在Android平台上使用的XML解析方案,我们还是得先把这些概念厘清。
XML基本概念DOM(Document Object Model,文档对象模型)和SAX(Simple API for XML,简单XML应用接口),是JAXP(Java API for XML Processing,Java XML处理的应用接口)定义的2种不同的对XML文档进行分析、处理的方法。
DOM方法是用标准对象模型表示 XML 文档;SAX方法则使用事件模型来处理程序来处理XML。
JAXP完成了对SAX、DOM的包装,它向应用程序提供针对DOM的DocumentBuilderFactory、 DocumentBuilder;以及针对SAX的SAXParserFactory、SAXParser抽象工厂类。在Jave SE中JAXP对应javax.xml.parsers包,DOM对应org.w3c.dom,SAX对应org.xml.sax。
Xerces首先继承并实现了javax.xml.parser包内的SAXParser、SAXParserFactory、DocumentBuilder、DocumentBuilderFactory等抽象类,并提供了JAXP中所定义的DOM、SAX(以及StAX,后面会介绍)这些XML解析方法的实现和相应的Parser。JDOM和DOM4J,是因为有人觉得W3C的DOM标准API太过难用而着手开发的替代API,它们和JAXP一样都是对DOM、SAX的封装,不过JDOM、DOM4J做了更多的事情,相当于上面提到JAXP接口+Xerces DOM实现部分。JDOM并没有自己开发Parser,所以还是需要利用Xerces的Parser部分,而DOM4J自带一个名为Alfred2的Parser,当然也可以使用Xerces的Parser。看起来JAXP具备更好的可移植性,即我们可以通过修改配置文件切换不同的DOM实现和SAX、DOM Parser,JDOM、DOM4J虽然也可以切换Parser,但是DOM实现是无法切换的。(参考: Java XML API 漫谈 和 JAXP全面介绍)
XML创建与解析
XML创建主要四种方式:Dom、Sax、Pull、Dom4j
XML解析主要四种方式:Dom、Sax、Pull、Dom4j
其中,利用Dom、Sax、Pull、Dom4j创建的标准XML格式文件,可以由任何一种Dom、Sax、Pull、Dom4j解析方式进行解析。
Android中解析XML
DOM解析器,是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,然后对文档的操作都是在这个树状模型上完成的。这个在内存中的文档树将是文档实际大小的几倍。这样做的好处是结构清晰、操作方便,而带来的麻烦就是极其耗费系统资源。SAX解析器,正好克服了DOM的缺点,分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档,它可以在某个条件得到满足时停止解析。
DOM与SAX比较
下面的表格列出了SAX和DOM在一些方面的对照:
SAXDOM顺序读入文档并产生相应事件,可以处理任何大小的XML文档在内存中创建文档树,不适于处理大型XML文档。只能对文档按顺序解析一遍,不支持对文档的随意访问。可以随意访问文档树的任何部分,没有次数限制。只能读取XML文档内容,而不能修改可以随意修改文档树,从而修改XML文档。开发上比较复杂,需要自己来实现事件处理器。易于理解,易于开发。对开发人员而言更灵活,可以用SAX创建自己的XML对象模型。已经在DOM基础之上创建好了文档树。通过对SAX和DOM的分析,它们各有自己的不同应用领域:
SAX适于处理下面的问题:对大型文档进行处理。只需要文档的部分内容,或者只需要从文档中得到特定信息。想创建自己的对象模型的时候。DOM适于处理下面的问题:
需要对文档进行修改需要随机对文档进行访问,例如XSLT解析器。
DOM和SAX的应用场景1、数据修改:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。2、数据容量: 对于大型文件,SAX 是更好的选择。3、数据使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。4、速度要求: 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这样的标准方法来开发不仅复杂度不高,即使出现问题在讨论组中寻求解决方案也是比较容易的。(参考: 使用 SAX 处理 XML 文档 和 DOM SAX JAXP DOM4J JDOM xerces解析器)Android中解析XML实现
基于上面的分析,采用JAXP+SAX的方案是我比较看好的。我们首先需要又一个SAXParserFactory的实例,然后从工厂中得到一个SAXParser实例,进而获取一个XMLReader;接下来新建一个Handler类继承自SAX Helpler的DefaultHandler,并实现startDocument()、startElement()、endElement()以及endDocument()等方法,并把这个Handler作为XMLReader的Content Handler;最后以带解析的XML文档为参数调用XMLReader的parse方法即可。具体的代码参考:Android 上使用 XML 和 Android 3.0 平台上创建和解析 XML
1、Android系统中的DOM和SAX实现Android SDK中包含了JAXP对应javax.xml.parsers包,SAX对应的org.xml.sax,DOM对应的org.w3c.dom包,所以我们就已经有了XML解析所需的JAXP——对SAX和DOM的封装(抽象类)以及SAX和DOM接口类,但是对于JAXP抽象类的实现,以及DOM和SAX接口类的实现在哪里呢?是和Java SE 5.0一样用了Xerces吗? 不!通过查看Android 1.5的源代码,我看到这部分的代码来自Apache Harmony这个开源的Java SE实现,位于./dalvik/libcore/xml/src/main/java/org/apache/harmony/xml目录。这里包含有一个完整的DOM实现(dom目录),对于javax.xml.parser下的抽象类的实现(parser目录),以及对于SAX接口类的实现(除此以外还包括对XMLPullParser接口的实现)。2、XmlPull 和 KXML2XmlPull解析器,提供了资源有限的环境(如J2ME)应用使用的XML解析API,XPP提供了非常简单的接口——包含一个接口、一个异常、一个建立解析器的factory。它采用了类似JAXP的工厂模式,把接口设计和实现分离,KXML2就是一个为J2ME环境优化的一个实现。在Android SDK中,已经包含了XmlPull(org.xmlpull.v1包)以及它的一个AddOn——SAX2 Driver——它使得我们可以通过SAX2的API来操纵XmlPull Parser。另外,通过sourcecode,我们可以看到Android SDK中的XmlPull的实现是KXML2,位于./dalvik/libcore/xml/src/main/java/org/kxml2目录。Apache Harmony的目录中同样有一个ExpatPullParser类实现了XMLPullParser接口,但是却没有XmlSerializer接口的实现,所以只能说Android中的Harmony也部分实现了XmlPull API。XmlPull+KXML2是下一步我要实践的方案,到时候还得学习一下如何“公平”的比较两者的性能。3、StAX尽管Android中还没有提供相应的支持,但是Streaming API for XML (StAX) 作为用Java语言处理 XML的最新标准,无论从性能还是可用性上都有出色的表现。它不仅提供了一个快捷、易用、占用内存少的 XML 解析器,它还提供了过滤器接口,允许程序员向应用程序业务逻辑隐藏不需要的文档细节。感兴趣的朋友可以看一看下面的文章。
使用 StAX 解析 XML,第 1 部分: Streaming API for XML (StAX) 简介
使用 StAX 解析 XML,第 2 部分: 拉式解析和事件
使用 StAX 解析 XML,第 3 部分: 使用定制事件和编写 XML
参考推荐:
Android中解析XML数据
android解析XML总结(SAX、Pull、Dom三种方式)
Android 解析XML文件的三种方式 DOM,SAX,PULL
android解析xml文件的方式(推荐,共三篇)
Android 上使用 XML
Android 上使用 XML 和 JSON
Android 3.0 平台上创建和解析 XML
Android XML解析学习——创建XML(共六篇,推荐)
常见xml的属性大全
首先按照程序的目录结构大致分析:
res/layout/ 这个目录存放的就是布局用的xml文件,一般默认为main.xml
res/values/ 这个目录存放的是一堆常量的xml文件
res/drawable/ 存放的是一些图片什么的,当然图标也在这里
下面主要对layout下的xml文件做个介绍,顺便也把布局的方法总结一下:
·文件的开头
这是在说明xml版本及字符编码
·紧接着到了关键的部分:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
其中开头的"LinearLayout"是布局的方式,可以有很多种,最常用的应该就是Linear了,其他的布局方法等下在后面总结。
接着android:layout_width(height)="wrap_content"是在设置这部分布局的宽高,也可以是绝对值,当然设置为绝对值时要标上单位。
·在
<Button id="@+id/btn"
android:text="Test!"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
开头id后面的就是控件名称,在用于添加事件Listener时会用到,而下几行的android:xxx就是设置控件的属性了,这些属性在Android的文档中都有,不需要特别去记,一般现查就可以了。
·有一点要说明的是,布局方法可以嵌套,有点像java中的Container,可以非常方便的把界面“堆”出来。
布局方式的简单说明:
查了Android文档发现布局确实很多,只列出两个我自己认为较常用的:
·LinearLayout线性的布局方式,要么上下,要么左右的添加控件,很常用;
·GridView中文翻译过来是网格布局,控件按照顺序依次填到每个格子里就好了,出来的界面会很整齐,较常用;
具体的几个布局如下:
@<1>LinearLayout(线性布局)提供了控件水平垂直排列的模型,同时可以通过设置子控件的weight布局参数控制各个控件在布局中的相对大小。水平(vertical)垂直(horizontal)
Android:layout_x/layout_y=”56px”确定控件位置
@<3>RelativeLayout(相对布局)允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。如果使用XML来指定这个layout,在你定义它之前,被关联的元素必须定义。
Android:src=http://blog.soso.com/qz.q/”@drawable/”属性指定所需图片的文件位置,用ImageView显示图片时,也应当用android:src指定要显示的图片
@<5>TableLayout(表格布局)以行列的形式管理子控件,每一行为一个TableRow的对象,TableRow也可以添加子控件
android:collapseColumns=“n”隐藏TableLayout里面的TableRow的列n
android:stretchColumns=“n” 设置列n为可延伸的列
android:shrinkColumns=“n” 设置列n为可收缩的列
Android:src=http://blog.soso.com/qz.q/”@drawable/”属性指定所需图片的文件位置,用ImageView显示图片时,也应当用android:src指定要显示的图片。
XML的国际化问题
XML的国际化问题XML的出现,使得网站的国际化变得空前的容易。和Java一样,XML也是使用的Unicode(ISO 10646)作为其编码标准,这是的网站建设者们能够很容易的写出各国的文字和符号,而不必过多的担心乱码的问题。Unicode 包括了所有的ASCII字符,以及简体中文,繁体中文,日文,韩文,希腊文等等。在XML中甚至可以允许有混合的编码出现,例如,一个显示中文的网页可以引用一个德文的单词,而不必担心出现乱码。开发者不需要专门为了Unicode而在去学习什么新的东西,网页一经写好后,在客户端的浏览器中显示时,浏览器会自动的使用合适的字符集把网页显示出来。
XML对于超链接有那些改进?
XML对于超链接有那些改进?XML对HTML的超链接做了一些改进,增加了一些特性,包括能够建立“智能”链接,可以省去不少手工编写JavsScript的麻烦。在XML中,链接是作为一个对象出现的,可以向操作任何的其它对象那样,对超链接进行方便的操作。原来的关于链接的的标准??XLL,XML链接语言(XML Linking Language)现在被分为两种新的标准:Xpointer和XLink.Xpointer:在HTML中,可以通过书签链接到一个页面的任何地方。通过Xpointer你将能够“寻址到(address to)”(而不是“链接到(link to)”)其他页面的任何一部分的内容。显然的,这对于在文档引用方面是非常有用的。Xlink:当用户点击了HTML中的一个超链接后,当前的网页被一个新的网页所替代。Xlink能够让Web开发者为链接这个对象添加一些动作(behaviors)。例如:在现在你必须用JavaScript来实现把链接的网页在一个新的窗口中显示出来,但Xlink通过给链接对象添加了一些行为,实现弹出窗口容易到只是简单的调用对象的方法而已。其他的一些有用的应用,像弹出的警告对话框,需要用户做出确认的对话框等等,通过Xlink的对象机制都可以很容易地实现。但现在,我们还都必须求助于脚本编程采能够解决。对于一系列相关的链接,XML能够让Web开发者创建扩展链接(Extended Links)来方便的实现像www.webring.com这样的网站或网页,把一些相同主题的网页自动的链接在一起。现在实现这个功能需要使用到CGI脚本,但是扩展链接将提供标准的方法来建立资源之间的关联。现在还有一些问题需要得到进一步的讨论,特别是在“行为”机制方面还有一些工作要作。但这并不妨碍在不久的将来,Xpinter和Xlink作为新的标准被广泛使用。
【XML的重要性】相关文章:
怎么打开xml文件的方法和软件06-17
高效沟通的重要性04-04
浅谈口才重要性03-28
形象礼仪的重要性02-23
形象与礼仪的重要性01-06
浅谈幼教的重要性06-20
沟通对企业的重要性03-03
音乐素养的重要性05-29
品牌战略的重要性04-23
薪酬管理作用与重要性05-20