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文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
总结,SAX解析XML是一种高效且节省内存的处理方式,适用于处理大量XML数据。通过实现回调接口,我们可以根据XML文档的结构执行相应的操作,而无需一次性加载整个文件。了解并熟练掌握SAX解析技术,有助于我们在处理...
总结一下,Java通过SAX方式解析XML文件时,主要涉及以下几个步骤: 1. 从服务器下载XML文件,通常使用`java.net.URL`和`java.io.InputStream`。 2. 创建SAX解析器,通过`XMLReaderFactory.createXMLReader()`。 3. ...
Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...
本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
给定的代码示例是一个使用SAX解析XML文件的Java程序。下面我们将分步解析这个过程: 1. **导入必要的包**:首先,我们需要导入SAX解析所需的类库,包括`javax.xml.parsers.*`、`org.xml.sax.*`、`org.xml.sax....
最后,使用`saxParser.parse()`方法解析XML文件并传递我们的处理器。 在实际应用中,根据需求,你可能需要在处理器方法内进行更复杂的数据处理,例如存储数据、计算或验证。SAX解析器允许你在不消耗大量内存的情况...
本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...
总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...
在使用SAX解析XML时,我们需要创建一个实现了SAX解析器接口的类,这个类会定义处理XML事件的方法,如`startDocument()`, `endDocument()`, `startElement()`, `endElement()`等。当解析器读到XML文档的相应部分时,...
day02_xml *demo01.App1\App2\App3 使用jaxp开发包中的SAX方式解析xml文档,该方式只能读取文档 *demo4j01.App dom4j CURD XML *domo4j.ex 对dom4j 的封装例子
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
以下是一个简单的SAX解析XML文件的Java代码示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;...
以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...
SAX(Simple API for XML)是处理XML的一种事件驱动的解析方法,它以流式的方式逐行读取XML文档,适用于处理大型XML文件,因为它不需要将整个文件加载到内存中。本文将详细介绍如何在Android中使用SAX方式解析XML。 ...
首先,SAX解析是一种基于事件驱动的解析方式,它不需要一次性加载整个XML文档到内存中,而是逐行读取,当遇到特定的XML元素(如开始标签、结束标签、属性等)时,会触发相应的事件处理器。这种方式对内存消耗较小,...
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...