`
jjxliu306
  • 浏览: 158834 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

SWT中利用Treeview来显示XML文件

阅读更多
最近一个项目需要在SWT界面上来对xml文件进行显示,但找了一下发现网上对在swing上显示有很多DEMO,但SWT这里却没有找到合适的,于是自动动手丰衣足食,下面我们来用 treeview来对XML文件进行显示,不多说,直接上代码,主要是标签管理器和内容管理器的:





1.标签管理器中主要取出当前节点的所有参数集合显示:

/**

*标签管理

*/

new LabelProvider() {
  
   public String getText(Object element) {
    if(element instanceof Node){
     //获取当前XML 节点中的参数集合map
           NamedNodeMap map = ((Node)element).getAttributes();
           if(map == null) return "" ;
     int length = map.getLength();
     //取得该节点的名称
     String str = ((Node)element).getNodeName() + "  " ;
     //循环取出所有的参数 包含名称和值
     for(int j = 0 ; j < length ; j++) {
     
      String values = map.item(j).getNodeName() + " =\"" + map.item(j).getFirstChild().getNodeValue() + "\"";
     
      str += values + " ";
     }
     return str;
          }
          
          return "";
   }
  }



2.内容管理器 主要是取出来当前节点的字节点和判断是否该XML节点包含有字节点



/**
   * 内容管理器
   */
  new ITreeContentProvider() {
  
   @Override
   public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    // TODO Auto-generated method stub
   
   }
  
   @Override
   public void dispose() {
    // TODO Auto-generated method stub
   
   }
  
   @Override
   public boolean hasChildren(Object element) {
   
    if(element instanceof Node) {
     Node node = (Node)element;
     if(node.hasChildNodes())
      return true;
    }
    
    return false;
   }
  
   @Override
   public Object getParent(Object element) {
    // TODO Auto-generated method stub
    return null;
   }
  
  
   @Override
   public Object[] getElements(Object inputElement) {
    System.out.println("########");
    return getChildren(inputElement);
   }
   @SuppressWarnings({ "rawtypes", "unchecked" })
   @Override
   public Object[] getChildren(Object parentElement) {
    //判断父节点是否为 XML中节点
    if(parentElement instanceof Node )
    {
     Node nodes = (Node)parentElement;
    
     List datas = new ArrayList();
    
     if (nodes != null) {
      //从第一个字节点开始遍历所有子节点,并且压入集合中
      for (Node n = nodes.getFirstChild(); n != null; n = n
       .getNextSibling()) {
      
       if(n != null && n.getNodeType() == Node.ELEMENT_NODE)
       
        datas.add(n);
       }
      return datas.toArray();
     }
   
     //如果为集合 则直接返回集合
    }else if(parentElement instanceof List) {
     return ((List)parentElement).toArray();
    }
//   
    return new Object[0];
   }
  }



3. treeview的input,初始化给传入xml文件中最高层的节点或同级最高的节点集合,直接上代码:



//设置input
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder;
  FileInputStream input = null;
  try {
   builder = factory.newDocumentBuilder();
   input = new FileInputStream(new File(path)); // path就是要解析的xml文件路径
   Document doc = builder.parse(input);
  
   //自动打开2级节点
   viewer.setAutoExpandLevel(2);
         viewer.setInput(doc.getChildNodes());
  } 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();
  } finally {
   if(input != null)
    try {
     input.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }



好了 到此我们就告一段落,不知道怎么去插图,所以放了DEMO到附件中,包含有实例文件等,直接import到eclipse即可,试试吧!
1
0
分享到:
评论
5 楼 jjxliu306 2013-07-17  
z570517692 写道
你有没有做过xml文件进行可视化编辑的项目,把xml文件以树形展示在SWT上之后点击某个节点,该节点的属性就会展示在tableViewer中,对它编辑之后,点保存按钮就会保存到xml文件中。    这就是我现在做的,感觉很有点难度啊! 



这个也简单 无非加一个对viewer加一个编辑支持即可 你看看 EditingSupport 这个类
4 楼 z570517692 2013-07-16  
你有没有做过xml文件进行可视化编辑的项目,把xml文件以树形展示在SWT上之后点击某个节点,该节点的属性就会展示在tableViewer中,对它编辑之后,点保存按钮就会保存到xml文件中。    这就是我现在做的,感觉很有点难度啊! 
3 楼 jjxliu306 2012-08-29  
Aubergine_kang 写道
xml标签全部内容全都显示出来了。如何过滤提取一部分标签,或者标签中的一个属性?


1.如果要过滤标签的话 两个方法 一个是加视图过滤器 viewerfilter 另一个就是在我们解析xml的时候 直接给扔掉

2.过滤一个属性 那就只有在标签管理器中 //取得该节点的名称
     String str = ((Node)element).getNodeName() + "  " ;
     //循环取出所有的参数 包含名称和值
     for(int j = 0 ; j < length ; j++) {
     
      String values = map.item(j).getNodeName() + " =\"" + map.item(j).getFirstChild().getNodeValue() + "\"";
     
      str += values + " ";
     }


我们在这里扔掉我们不想要的

2 楼 gichan 2012-07-11  
一直对xml生成树,没有思路,借鉴一下
1 楼 Aubergine_kang 2012-02-08  
xml标签全部内容全都显示出来了。如何过滤提取一部分标签,或者标签中的一个属性?

相关推荐

    XML显示在TreeView控件。。。

    通过以上步骤,你可以在TreeView控件中有效地显示XML数据,使用户能够以图形方式查看和操作XML文档。这种方式在配置文件管理、数据浏览和XML数据编辑等场景中非常有用。同时,还可以结合其他.NET Framework提供的XML...

    JAVA组件复习资料.pdf

    20. 一个XML文件最基本的构成是元素(Element),可选的处理指令(Processing Instruction)和声明(Declaration)。 21. Java为字符串处理提供了`String`和`StringBuilder`(或`StringBuffer`)两个类。`String`是...

    基于4GGPRS DTU开发板的硬件图纸与软件代码全套资源,军工级电路,支持多种通信协议与数据加密,适合物联网应用 ,基于4GGPRS DTU开发板的硬件图纸与软件代码全套,军工级电路,支持多种通信协

    基于4GGPRS DTU开发板的硬件图纸与软件代码全套资源,军工级电路,支持多种通信协议与数据加密,适合物联网应用。,基于4GGPRS DTU开发板的硬件图纸与软件代码全套,军工级电路,支持多种通信协议与数据加密,适用于多种物联网应用。,资料:4g GPRS DTU 开发板软件代码硬件图纸料包括:原理图,版图,单片机代码,sim800c官方资料 不含PCB板 本公司批产产品,已无故障运行数年 全套硬件图纸和软件代码。 程序比正点原子的可靠,军工级485电路。 NBIOT和4G等采用AT指令的均可参照此代码 GPRS具有比NBIOT更低的价格更好的网络,是目前低速物联网的主要通讯技术之一。 485转GPRS GPRS支持协议: TCP UDP HTTP-GET HTTP-POST FTP Md5数据加密 心跳包 电源部分,带共模电感,防反接二极管,Tvs管,5-30Vdc转5V和4V 485部分,硬件延时电路,可靠稳定 引出网络状态(兼电源)指示灯,收发指示灯,设置状态指示灯 微动按键设置工作状态 已预留LORA模块位置,若不用可将他的Io口改做他用,能引出一路串口,2路Io口 单片机

    scala-intellij-bin-2024.1.1.zip

    scala-intellij-bin-2024.1.1.zip

    基于Android的平台书架设计实现源码.zip

    基于Android的平台书架设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    (源码)基于nRF5系列芯片和SoftDevice SDK的蓝牙低能耗应用_1.zip

    # 基于nRF5系列芯片和SoftDevice SDK的蓝牙低能耗应用 ## 项目简介 这是一个基于nRF5系列芯片和SoftDevice SDK的蓝牙低能耗(BLE)应用程序的示例项目。项目包含基于nRF51822和nRF52832芯片的示例代码,以及设备固件升级(DFU)相关的代码。 ## 项目的主要特性和功能 基于nRF5系列芯片项目代码适用于Nordic Semiconductor的nRF51822和nRF52832芯片,这些芯片是专为蓝牙低能耗应用设计的。 使用SoftDevice SDK项目使用了Nordic的SoftDevice SDK,这是一个高度优化的BLE堆栈,适用于nRF5系列芯片。 支持UART通信项目中的BLE应用程序通过UART接口进行通信,允许数据通过BLE连接进行发送和接收。 设备固件升级(DFU)支持项目包含用于安全设备固件升级的引导加载程序,支持固件更新的验证和存储。

    矿业生产管理数字化平台解决方案.doc

    矿业生产管理数字化平台解决方案.doc

    【ACO三维路径规划】基于matlab蚁群算法ACO无人机巡检三维路径规划【含Matlab源码 13058期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    battery 电池信息表

    kylin v10 SP1 系统下 可以查看本机电池容量放电和充电电流

    基于深度学习的movielens推荐模型新版算法源码+数据+说明文档

    【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip 基于深度学习的movielens推荐模型新版算法源码+数据+说明文档.zip

    【雷达通信】基于matlab雷达系统极化对消仿真【含Matlab源码 9700期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    STM32的智能养老服务机器人系统设计.pdf

    1、以上文章可用于参考,请勿直接抄袭,学习、当作参考文献可以,主张借鉴学习 2、资源本身不含 对应项目代码,如需完整项目源码,请私信博主获取

    基于STM32的智能风扇系统设计.pdf

    1、以上文章可用于参考,请勿直接抄袭,学习、当作参考文献可以,主张借鉴学习 2、资源本身不含 对应项目代码,如需完整项目源码,请私信博主获取

    14.智能台灯(语音模式)_20240318_205506.zip

    14.智能台灯(语音模式)_20240318_205506.zip

    数字信号处理中的采样与重构理论及其应用

    数字信号处理中的采样与重构理论及其应用

    Python快速入门.zip

    python快速入门,零基础也能轻松掌握的入门指南,看着一个就够了。

    LabView与三菱全系列通讯方法详解:上位机读取方法及实践,LabView与三菱全系列通讯方法及上位机数据读取攻略,labview和三菱全系列通讯方法 labview和三菱全系列通讯办法,和上位机读

    LabView与三菱全系列通讯方法详解:上位机读取方法及实践,LabView与三菱全系列通讯方法及上位机数据读取攻略,labview和三菱全系列通讯方法 labview和三菱全系列通讯办法,和上位机读取方法。 ,LabVIEW; 三菱全系列通讯方法; 三菱全系列通讯办法; 上位机读取方法,LabVIEW与三菱全系列通讯方案及上位机读取方法详解

    基于51的多参数水质监测与报警系统设计20250304

    题目:基于51单片机的多参数水质监测与报警系统设计 主控:AT89C51 显示:LCD1602 DS18B20温度传感器 浊度传感器(PCF8591+滑动变阻器模拟) PH传感器(ADC0832+滑动变阻器) 声光报警 led*4 功能: 1.实时检测水质温度、浊度、PH 2.实时显示相关数据 3.可以通过按键修改阈值 4.各数值不在标准范围内启动声光报警 5.ph低于下限红色小灯点亮;ph高于上限绿色小灯电亮;温度低于阈值蓝色小灯电亮;浑浊度高于阈值橙色小灯电亮

    B站黑马程序员python第二章06-标识符(个人笔记)

    在B站看黑马程序员视频,整理的个人笔记

Global site tag (gtag.js) - Google Analytics