0 0

一个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个答案 按时间排序 按投票排序

0 0

采纳的答案

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
0 0

参考下我的博文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

相关推荐

    Android中XML数据解析

    首先,DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成一个树形结构,然后可以遍历这个结构来访问和修改XML数据。优点是操作灵活,但缺点是如果XML文件较大,可能导致内存消耗过高。在Android中...

    android下解析xml文件的demo

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历和修改XML文档的任何部分。然而,由于它需要一次性加载整个文件,对于大文件来说可能会消耗大量内存。 在"ReadXMLDemo"中,使用DOM解析的...

    android xml pull解析示例

    - 迭代事件:调用`next()`方法,遍历XML文档中的每一个事件。事件包括START_DOCUMENT、START_TAG、END_TAG、TEXT等。 - 处理事件:根据事件类型进行相应的操作,如读取标签名、属性值、文本内容等。 3. **Android...

    android xml多种解析生成

    * DOM(Document Object Model)解析器是一种基于树形结构的解析器,它可以将 XML 文件解析为一个树形结构,然后使用 Java 对象处理该结构。DOM 解析器的优点是它可以随机访问 XML 文件的任何部分,但是它需要将整个...

    六,Android Xml解析

    这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看DOM解析。DOM(Document Object Model)是一种将XML文档加载到内存中并创建一个树形结构的方法。通过DOM解析,...

    Android Dom解析XML

    DOM解析器读取XML文件并构建一个内存中的节点树,其中每个元素、属性、文本等都对应一个节点。在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析...

    android中xml文件的解析.doc

    理解如何解析XML文件是至关重要的,本节将深入探讨Android中的三种XML解析方法:SAX、DOM和Pull解析。 **SAX解析** SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不加载整个XML文档到内存,而是逐行...

    android java xml 解析生成jar

    本主题将详细讲解如何在Android环境中利用Java进行XML解析,并生成JDOM库的jar文件。 XML解析在Android中的重要性不言而喻,因为XML常被用来描述应用程序的配置、布局,甚至是网络通信的数据交换格式。Java提供了...

    android 解析XML文件 生成XML文件

    在Android开发中,XML文件广泛用于存储数据、配置文件以及应用...以上是Android环境中XML解析与生成的基础知识,实际应用中可能需要根据需求进行扩展和优化。XMLdemo项目应包含了这些方法的完整实现,可供学习和参考。

    android 之xml解析大全

    本篇文章将详细探讨Android中四种主要的XML解析方法:SAXParser、Document、XMLResource和VTDGen。 1. SAXParser(Simple API for XML) SAXParser是基于事件驱动的解析器,适用于处理大型XML文档。它不会一次性...

    Android解析XML文件

    本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...

    Android 解析xml文件

    ### XML解析器类型 Android提供了多种解析XML的方式,主要包括以下几种: 1. **DOM解析器**:Document Object Model(DOM)解析器将整个XML文件加载到内存中,形成一个树形结构,便于对整个文档进行遍历。但是,...

    android下XML解析源码

    Android提供了两种主要的XML解析方式:DOM(Document Object Model)和Pull解析器。下面我们将详细探讨这两种解析方法及其在Android下的实现原理。 **DOM解析** DOM解析器将整个XML文档加载到内存中,形成一个树形...

    Android XML 解析 写入

    本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...

    Android XML 解析笔记

    Android支持多种XML解析技术,包括DOM、SAX和Pull解析。每种方法都有其特定的优势和应用场景。 #### DOM解析XML DOM(Document Object Model)解析是一种将整个XML文档加载到内存中,并构建出一棵树状结构(称为DOM...

    Android中xml解析

    本篇文章将深入探讨XML解析在Android中的应用,并特别关注XStream库的使用。 首先,Android提供了两种内置的XML解析方式:DOM(文档对象模型)和SAX(简单API for XML)。DOM解析器将整个XML文档加载到内存中,形成...

    Android中,使用SAX和PULL解析天气预报XML

    本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...

    Android 解析xml实现类似网易客户端源码

    首先,让我们了解XML解析的基本概念,然后探讨在Android中实现这一功能的关键技术和步骤。 XML是一种自描述性的标记语言,它允许我们定义自己的标签来表示数据。在Android中,有两种主要的XML解析方式:DOM...

    android中使用PULL解析XML

    在Android开发中,处理XML数据是一项常见的任务,无论是从网络获取数据还是本地资源,XML都是一个常见的数据交换格式。本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且...

    android读写xml文件

    android中读写xml文件简单demo,可以通过此代码来简单的读取xml配置文件

Global site tag (gtag.js) - Google Analytics