`
melord
  • 浏览: 145629 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用SAX方式解析Xml文件

阅读更多
xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<structure>
		<name value="Internet Prototal"></name>
		<tiptext>dd</tiptext>
		<member>
			<name value="length"></name>
			<tiptext>ddf</tiptext>
		</member>
		<union>
			<name value="dkdkdk"></name>
			<member>
				<name value="icmp"></name>
				<tiptext>ddf</tiptext>
			</member>
		</union>
	</structure>
	<structure>
		<name value="Internet Version 6"></name>
		<tiptext>dd</tiptext>
		<member>
			<name value="icmp"></name>
			<tiptext>ddf</tiptext>
		</member>
	</structure>
</root>

解析类的ContentHandler
package com.example.rcp.first.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.example.rcp.first.model.DefaultXmlNode;
import com.example.rcp.first.model.IXmlNode;
import com.example.rcp.first.model.Jump;
import com.example.rcp.first.model.Member;
import com.example.rcp.first.model.Structure;
import com.example.rcp.first.model.Union;

public class MyContentHandler extends DefaultHandler {
	IXmlNode root = null;
	
	public IXmlNode getRoot() {
		return root;
	}
	public void setRoot(IXmlNode root) {
		this.root = root;
	}
	IXmlNode parent = null;
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if(root == null){
			root = new DefaultXmlNode();
			return;
		}
		DefaultXmlNode cNode = new DefaultXmlNode();
		if("structure".equals(qName)){
			cNode = new Structure();
			if(parent == null){
				root.addChild(cNode);
			}else{
				parent.addChild(cNode);
			}
		}else if("union".equals(qName)){
			cNode = new Union();
			if(parent != null){
				parent.addChild(cNode);
			}
		}else if("member".equals(qName)){
			cNode = new Member();
			if(parent != null){
				parent.addChild(cNode);
			}
		}else if("jump".equals(qName)){
			cNode = new Jump();
			if(parent != null){
				parent.addChild(cNode);
			}
		}else{
			if("name".equals(qName)){
				if(parent!=null){
					parent.setName(attributes.getValue("value"));
				}
				
			}
			
		}
		cNode.setParent(parent);
		String pName = parent == null ? "" : (parent.getClass() + "@" + parent.getName());
		//System.out.println("当前结点:" + qName + " 父结点:" + pName);
		parent = cNode;
	}
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if(parent != null)
		parent = parent.getParent();
	}

}

RCP视图使用TreeViewer,其内容提供类与标签提供类如下:
	class ViewContentProvider implements IStructuredContentProvider, 
										   ITreeContentProvider {

		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
			System.out.println(newInput);
		}
		public void dispose() {
		}
		public Object[] getElements(Object parent) {
			if(parent instanceof IXmlNode){
				IXmlNode node = (IXmlNode)parent;
				return node.getChildren().toArray();
			}
			else{
				return null;
			}
		}
		public Object getParent(Object child) {
			return null;
		}
		public Object [] getChildren(Object parent) {
			if (parent instanceof IXmlNode) {
				return ((IXmlNode)parent).getChildren().toArray();
			}
			return new Object[0];
		}
		public boolean hasChildren(Object parent) {
			System.out.println(parent.getClass());
			if (parent instanceof IXmlNode){
				List children = ((IXmlNode)parent).getChildren();
				System.out.println(children.isEmpty());
				return !children.isEmpty();
			}
			return false;
		}
	
	}
	class ViewLabelProvider extends LabelProvider {

		public String getText(Object obj) {
			if(obj instanceof IXmlNode){
				return ((IXmlNode)obj).getName();
			}
			return obj.toString();
		}
		public Image getImage(Object obj) {
			String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
			if (obj instanceof IXmlNode)
			   imageKey = ISharedImages.IMG_OBJ_FOLDER;
			return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
		}
	}
分享到:
评论

相关推荐

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    Sax解析XML文件解析

    总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...

    javaSAX方式解析xml文档

    总结一下,Java通过SAX方式解析XML文件时,主要涉及以下几个步骤: 1. 从服务器下载XML文件,通常使用`java.net.URL`和`java.io.InputStream`。 2. 创建SAX解析器,通过`XMLReaderFactory.createXMLReader()`。 3. ...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    sax方式解析XML文件

    给定的代码示例是一个使用SAX解析XML文件的Java程序。下面我们将分步解析这个过程: 1. **导入必要的包**:首先,我们需要导入SAX解析所需的类库,包括`javax.xml.parsers.*`、`org.xml.sax.*`、`org.xml.sax....

    SAX解析超大XML文件 示例代码

    最后,使用`saxParser.parse()`方法解析XML文件并传递我们的处理器。 在实际应用中,根据需求,你可能需要在处理器方法内进行更复杂的数据处理,例如存储数据、计算或验证。SAX解析器允许你在不消耗大量内存的情况...

    Servlet利用SAX解析XML文档

    本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    SAX方式解析xml

    在使用SAX解析XML时,我们需要创建一个实现了SAX解析器接口的类,这个类会定义处理XML事件的方法,如`startDocument()`, `endDocument()`, `startElement()`, `endElement()`等。当解析器读到XML文档的相应部分时,...

    使用jaxp开发包中的SAX方式解析xml文档

    day02_xml *demo01.App1\App2\App3 使用jaxp开发包中的SAX方式解析xml文档,该方式只能读取文档 *demo4j01.App dom4j CURD XML *domo4j.ex 对dom4j 的封装例子

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    sax解析xml本地读取xml

    以下是一个简单的SAX解析XML文件的Java代码示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    android 以SAX方式解析xml

    SAX(Simple API for XML)是处理XML的一种事件驱动的解析方法,它以流式的方式逐行读取XML文档,适用于处理大型XML文件,因为它不需要将整个文件加载到内存中。本文将详细介绍如何在Android中使用SAX方式解析XML。 ...

    android SAX PULL 解析XML文件 代码 详解

    首先,SAX解析是一种基于事件驱动的解析方式,它不需要一次性加载整个XML文档到内存中,而是逐行读取,当遇到特定的XML元素(如开始标签、结束标签、属性等)时,会触发相应的事件处理器。这种方式对内存消耗较小,...

    Servlet利用SAX解析XML文档(新上传的有源码)

    Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...

Global site tag (gtag.js) - Google Analytics