-
一个android中XML解析的问题。10
我遇到一个SAX解析XML文件的问题,求高手指导下。如何将如下XML文件解析:
<content type="part" name="学">
<content type="part" name="一部分">
<content type="text" name="一">
我<font color="red">是</font>
一<font color="red">个</font>
兵<word index="1">来</word>
<sentence>自</sentence>
<text index="1">老百姓。</text>
</content>
<decript>
士兵
</decript>
</content>
<content>
求只要简单写出ContentHandler接口中的处理方法就好,万分感激,求指导教育。2012年10月10日 13:56
2个答案 按时间排序 按投票排序
-
采纳的答案
package XML; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXParserXML { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); File file = new File(System.getProperty("user.dir") + "/content.xml"); parser.parse(file, new PersonXMLHandler());// 此处的file可以使文件、输入流、或URL字符串 } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Content{ String type; String name; String description; List<Content> subcontents; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public List<Content> getSubcontents() { return subcontents; } public void setSubcontents(List<Content> subcontents) { this.subcontents = subcontents; } @Override public String toString() { return "Content [description=" + description + ", name=" + name + ", subcontents=" + subcontents.size() + ", type=" + type + "]"; } } class PersonXMLHandler extends DefaultHandler { Content content; String temp = ""; String currenttag = null; List<Content> subcontents; int level=0; Content subcontent; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if (currenttag != null) { String value = new String(ch, start, length); if (currenttag.equals("decript")) { temp += value;// 处理长文本 } } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub currenttag=null; if (qName.endsWith("decript")) { if(level!=0){ subcontent.setDescription(temp); }else{ content.setDescription(temp); } temp = ""; } if(qName.endsWith("content")){ if(level==0){ content.setSubcontents(subcontents); subcontents=null; }else if(level==1){ subcontents.add(subcontent); subcontent=null; } } } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if (qName.equals("content")) { content = new Content(); content.setName(attributes.getValue("name")); content.setType(attributes.getValue("type")); if(level==0) level++; else{ subcontents=new ArrayList<Content>(); subcontent=new Content(); content.setName(attributes.getValue("name")); content.setType(attributes.getValue("type")); } } currenttag = qName; } }
2012年10月11日 16:11
-
参考下我的博文http://fengjianjian007-qq-com.iteye.com/admin/blogs/1562059
package xmlHandler; import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXParserXML { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); File file = new File(System.getProperty("user.dir") + "/person.xml"); parser.parse(file, new PersonXMLHandler());// 此处的file可以使文件、输入流、或URL字符串 } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class PersonXMLHandler extends DefaultHandler { Person person; String temp = ""; String currenttag = null; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if (currenttag != null) { String value = new String(ch, start, length); if (currenttag.equals("name")) { person.setName(value); } if (currenttag.equals("description")) { temp += value;// 处理长文本 } } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub currenttag=null; if (qName.endsWith("description")) { person.setDescription(temp); temp = ""; } if (qName.endsWith("person")) System.out.println("当前解析出的结果:" + person.toString()); } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if (qName.equals("person")) { person = new Person(); person.setSex(attributes.getValue("sex")); } currenttag = qName; } }
2012年10月10日 15:41
相关推荐
首先,DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成一个树形结构,然后可以遍历这个结构来访问和修改XML数据。优点是操作灵活,但缺点是如果XML文件较大,可能导致内存消耗过高。在Android中...
DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历和修改XML文档的任何部分。然而,由于它需要一次性加载整个文件,对于大文件来说可能会消耗大量内存。 在"ReadXMLDemo"中,使用DOM解析的...
- 迭代事件:调用`next()`方法,遍历XML文档中的每一个事件。事件包括START_DOCUMENT、START_TAG、END_TAG、TEXT等。 - 处理事件:根据事件类型进行相应的操作,如读取标签名、属性值、文本内容等。 3. **Android...
* DOM(Document Object Model)解析器是一种基于树形结构的解析器,它可以将 XML 文件解析为一个树形结构,然后使用 Java 对象处理该结构。DOM 解析器的优点是它可以随机访问 XML 文件的任何部分,但是它需要将整个...
这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看DOM解析。DOM(Document Object Model)是一种将XML文档加载到内存中并创建一个树形结构的方法。通过DOM解析,...
DOM解析器读取XML文件并构建一个内存中的节点树,其中每个元素、属性、文本等都对应一个节点。在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析...
理解如何解析XML文件是至关重要的,本节将深入探讨Android中的三种XML解析方法:SAX、DOM和Pull解析。 **SAX解析** SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不加载整个XML文档到内存,而是逐行...
本主题将详细讲解如何在Android环境中利用Java进行XML解析,并生成JDOM库的jar文件。 XML解析在Android中的重要性不言而喻,因为XML常被用来描述应用程序的配置、布局,甚至是网络通信的数据交换格式。Java提供了...
在Android开发中,XML文件广泛用于存储数据、配置文件以及应用...以上是Android环境中XML解析与生成的基础知识,实际应用中可能需要根据需求进行扩展和优化。XMLdemo项目应包含了这些方法的完整实现,可供学习和参考。
本篇文章将详细探讨Android中四种主要的XML解析方法:SAXParser、Document、XMLResource和VTDGen。 1. SAXParser(Simple API for XML) SAXParser是基于事件驱动的解析器,适用于处理大型XML文档。它不会一次性...
本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...
### XML解析器类型 Android提供了多种解析XML的方式,主要包括以下几种: 1. **DOM解析器**:Document Object Model(DOM)解析器将整个XML文件加载到内存中,形成一个树形结构,便于对整个文档进行遍历。但是,...
Android提供了两种主要的XML解析方式:DOM(Document Object Model)和Pull解析器。下面我们将详细探讨这两种解析方法及其在Android下的实现原理。 **DOM解析** DOM解析器将整个XML文档加载到内存中,形成一个树形...
本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...
Android支持多种XML解析技术,包括DOM、SAX和Pull解析。每种方法都有其特定的优势和应用场景。 #### DOM解析XML DOM(Document Object Model)解析是一种将整个XML文档加载到内存中,并构建出一棵树状结构(称为DOM...
本篇文章将深入探讨XML解析在Android中的应用,并特别关注XStream库的使用。 首先,Android提供了两种内置的XML解析方式:DOM(文档对象模型)和SAX(简单API for XML)。DOM解析器将整个XML文档加载到内存中,形成...
本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...
首先,让我们了解XML解析的基本概念,然后探讨在Android中实现这一功能的关键技术和步骤。 XML是一种自描述性的标记语言,它允许我们定义自己的标签来表示数据。在Android中,有两种主要的XML解析方式:DOM...
在Android开发中,处理XML数据是一项常见的任务,无论是从网络获取数据还是本地资源,XML都是一个常见的数据交换格式。本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且...
android中读写xml文件简单demo,可以通过此代码来简单的读取xml配置文件