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即可,试试吧!

猜你喜欢

转载自jjxliu306.iteye.com/blog/1189579