xml语言

Sax读取xml文件(一)

风流意气都作罢 提交于 2020-03-24 06:23:57
SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。   常见的事件处理器有三种基本类型:   ● 用于访问XML DTD内容的DTDHandler;   ● 用于低级访问解析错误的ErrorHandler;   ● 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。 解析器读取输入文档并在处理文档时将每个事件推给文档处理器(MyContentHandler)。   与DOM相比,SAX解析器能提供更好的性能优势,它提供对XML文档内容的有效低级访问。SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使SAX解析器可以解析大于系统内存的文档。另外,你无需像在DOM中那样为所有节点创建对象。最后,SAX“推”模型可用于广播环境,能够同时注册多个ContentHandler,并行接收事件,而不是在一个管道中一个接一个地进行处理。   SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为SAX解析器不能交流元信息,如DOM的父/子支持,所以你必须跟踪解析器处在文档层次的哪个位置

Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)

最后都变了- 提交于 2020-03-24 06:21:16
Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器。 SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。 另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 SAX。 2) SAX 这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。 3) 选择 DOM 还是选择

Android SAX解析xml文件

☆樱花仙子☆ 提交于 2020-03-24 06:20:13
andorid读取xml文件内容方法有三种 sax dom pull,其中 pull是android自带的 1.先认识一下xml文件中的些术语 <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明</name> <age>23</age> </person> <person id="22"> <name>李量</name> <age>25</age> </person> </persons> xml中的标签和内容都可以叫做节点,其中的persons person name age 这些都叫做元素(element).而像李明 25 这些值叫做文本节点.那么有个问题 中<persons>到<person>之间的是什么,什么都没有? 答案是他也是节点,是文本节点,你会说他里面什么都没有啊,错了,它有回车和空格.这个在sax解析xml中你debug一下就会发现.回车和空格(或者 是tab)是会被读取出来的.id是属性. 2.sax sax是采用事件驱动,就是说他不需要完全读完xml文件,他是读到一个节点就解析一个节点是否符合xml语法,如果符合就调用相对应的方法其实就是回调方法,并且没有记忆功能.下面提到的这些方法都是在ContentHander()接口中的方法. startDocumnet()

android sax解析xml

寵の児 提交于 2020-03-24 06:16:49
在android 中解析 android 主要有 2 种方法,分别是 sax 和 jdom 第一种: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

关于android/java中xml的解析

牧云@^-^@ 提交于 2020-03-24 06:08:36
Http 数据组织方式 HTTP 网络传输中的数据组织方式有三种 1、Html 2、Xml 3、Json XML 称为可扩展标记语言,它与 HTML 一样,都是 SGML (标准通用标记语言), XML 是 Internet 环境中跨平台的,依赖于内容技术,是当前处理结构化文档信息的有力工具,可扩展标记语言 XML 是一种简单的数据存储语言,使用一系列简单的标记描述数据。 XML 结构示意图: <?xml version=”1.0” encoding=”UTF-8”> <persons> <person id=”23”> <name>jack</name> <age>30</age> </person> <person id=”20”> <name>rose</name> <age>25</age> </person> <persons> XML 的结构解析如下 1、节点 2、元素 3、属性和属性值 由于 XML 的扩展性强,致使它需要有稳定的基础规则来支持扩展, 该语法规则是: 1、开始和结束标签匹配 2、嵌套标签不能互相嵌套 3、区分大小写 Android 中,解析 Xml 数据的三种方式: 1、DOM ( org.w3c.dom ) “文档对象模型”方式,解析完的 Xml 将生产一个树状的结构对象 2、SAX(org.xml.sax) SimpleAPI for XML

Android中xml文件的解析

时光怂恿深爱的人放手 提交于 2020-03-24 06:05:16
需要有一个解析工厂,SAXParserFactory,通过解析工厂来获得解析器XMLReader,然后给解析器配置ContentHandler,最后通过parse来启动解析,其中有以下主要的方法: startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作。 startElement: (String namespaceURI,String localName,String qName,Attributes atts)当遇开始标签的时候就会触发这个方法。 endElement(String uri,String localName,String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。 charachers(char [] ch,int start,int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。 下面通过一个例子来说一下,之前做的版本更新的时候用过的,通过从服务器上获取当前版本信息文件,解析后和当前软件版本号比较来判断是否有新版本发布,这里只用到下载xml文件并解析。 下载部分代码: 1 public class HttpDownloader { 2 private URL url = null; 3 /** 4 * 根据URL下载文件

Android 利用SAX解析XML

天涯浪子 提交于 2020-03-24 05:57:30
进入正题: 1、待解析的XML : <?xml version="1.0" encoding="utf-8"?> <mobile> <Response> <list> <item> <id>39</id> <username>user1</username> <content>content1</content> <flag>1</flag> <urlstr>20140103013946_jygy.amr</urlstr> </item> <item> <id>38</id> <username>user2</username> <content>content2</content> <flag>3</flag> <urlstr>20140103013621_jygy.jpg</urlstr> </item> </list> </Response> </mobile> 2、根据上面的XML定义实体 Item.java public class Item { private String id; private String username; private String content; private String flag; private String urlstr; public String getId() { return id; } public void

javaweb学习总结十二(JAXP对XML文档进行SAX解析)

[亡魂溺海] 提交于 2020-03-24 05:35:22
一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <students> 3 <student> 4 <name sid="111">李四</name> 5 <age>23</age> 6 <gender>男</gender> 7 </student> 8 <student> 9 <name sid="222">张三</name> 10 <age>21</age> 11 <gender>女</gender> 12 </student> 13 </students> 2:测试主体部分 1 @Test 2 public void testParseXml() throws ParserConfigurationException, 3 SAXException, IOException { 4 // 1:获取解析器工厂 5 SAXParserFactory factory = SAXParserFactory.newInstance(); 6 // 2:获取解析器 7 SAXParser parser = factory.newSAXParser(); 8 // 3:获取读取器 9

Spring-Batch将CSV文件转为XML文件

十年热恋 提交于 2020-03-24 04:59:52
1 介绍 用Spring Batch实现一个简单的需求,将csv文件转换成xml文件。 csv文件如下:record.csv username, user_id, transaction_date, transaction_amount devendra, 1234, 31/10/2015, 10000 john, 2134, 3/12/2015, 12321 robin, 2134, 2/02/2015, 23411 转换成的xml文件如下:record.xml <?xml version="1.0" encoding="UTF-8"?><transactionRecord> <transactionRecord> <amount>10000.0</amount> <transactionDate>2015-10-31T00:00:00+08:00</transactionDate> <userId>1234</userId> <username>devendra</username> </transactionRecord> <transactionRecord> <amount>12321.0</amount> <transactionDate>2015-12-03T00:00:00+08:00</transactionDate> <userId>2134</userId>

XmlDocument操作xml文档

假装没事ソ 提交于 2020-03-24 04:20:38
<?xml version="1.0" encoding="utf-8"?> <userdata createuser="false"> <dataconnection> <server>xml test</server> <uid>sa</uid> <pwd>sa</pwd> </dataconnection> <net> <name>xml document</name> </net> </userdata> 读取节点中的一个属性 XmlDocument doc=new XmlDocument(); doc.Load("config.xml"); XmlNode xnuser=doc.SelectSingleNode("userdata"); string flag=xnuser.Attributes["createuser"].InnerText; 读取节点中的值 XmlDocument doc=new XmlDocument(); doc.Load("config.xml"); XmlNode xnserver = doc.SelectSingleNode("userdata/dataconnection/server"); 修改节点的属性 XmlDocument doc=new XmlDocument(); doc.Load("config.xml"); XmlNode