使用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);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值