基于XML的无限分类(jdom+xpath)

<?xml version="1.0" encoding="utf-8"?>
<root>
 <node id="1" name="name1">
  <node id="11" name="name11">
   <node id="3122" name="name3">
    <node id="2" name="新值" />
   </node>
  </node>
 </node>
 <node id="4" name="name4" />
</root>

/

/*
 * 创建日期 2007-2-8
 * Author:Lulu
 * Msn:smildlzj@hotmail.com
 */
package com.Try;
import java.io.*;
import java.util.*;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

import com.Try.Item.Units;

public class XML {
//转载请注明
 static Document doc = null;
 public static String XMLFile="d:/web.xml";
 public static int New_Id=1;
 public static Element root;
 
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:自增编号
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
 public synchronized static String NewID()
 {
  New_Id++;
  return New_Id+"";
 }
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:显示树,获得整棵树
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/

 public static void ShowTree(LinkedList list,Element node,int Level)
 {
  
  Units unit=null;
  try{
   List ls = node.getChildren();
    Element el=null;
         for (Iterator iter = ls.iterator(); iter.hasNext(); )
         {
             el = (Element) iter.next();
             unit=new Units();
             unit.setId(el.getAttributeValue("id"));
             unit.setValue(el.getAttributeValue("name"));
             unit.setLevel(Level);
            
             for(int i=0;i<Level;i++)System.out.print(" ");
              System.out.println(el.getAttributeValue("id")+"="+el.getAttributeValue("name"));
             
              ShowTree(list,el,Level+1);
           }
   
  }catch(Exception e){
   System.out.println(e.toString());
  }
 }
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:查找节点,并返回
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
 public static Element FindNode(int id)
 {

  try{
   Element node=(Element) XPath.selectSingleNode(root,"//*[@id='"+id+"']");
   //System.out.println(node.getAttributeValue("name"));
   
   return node;
  }catch(Exception e){
   System.out.println(e.toString());
   return null;
  }
 }
 
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:插入新节点
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
 public static void InsertNode(int ParentId,String name)
 {
  try{
   Element node=FindNode(ParentId);
   //找不到节点
   if(node==null)return;
   
   Element newElement = new Element("node");
   newElement.setAttribute("id",NewID());
   newElement.setAttribute("name",name);
   node.addContent(newElement);
   
  }catch(Exception e){
   System.out.println(e.toString());
  }
 }
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:删除节点
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
 public static Element DeleteNode(int Id)
 {
  try{
   Element node=FindNode(Id);
   //找不到节点
   if(node==null)return null;

   node.getParent().removeContent(node);
   
   return node;
  }catch(Exception e){
   System.out.println(e.toString());
   return null;
  }
 }
 /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:移动节点
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
 public static void MoveNode(int Id,int NewParentId)
 {
  try{
   
   Element newParent=FindNode(NewParentId);
   //找不到新父节点
   if(newParent==null)return;
   
   Element node=DeleteNode(Id);
   //找不到需要移动的节点
   if(newParent==null)return;
   newParent.addContent(node);
   
  }catch(Exception e){
   System.out.println(e.toString());
  }
 }
    public static void main (String args[]) throws Exception {

     SAXBuilder builder = new SAXBuilder();
     
        try {
         LinkedList list=new LinkedList();
          doc = builder.build(new File(XMLFile));;
          root = doc.getRootElement();
          //ShowTree(list,root,0);
          //FindNode(31);
          //InsertNode(3122,"新值");
          //DeleteNode(2);
          MoveNode(3122,11);
          Save();
         
        } catch (Exception ex) {
              ex.printStackTrace();
            }

    }
    /*############################################################
 '* 创建日期 2007-2-8
 '* 说明:输出到XML
 '* Msn:smildlzj@hotmail.com
 '* 作者: lulu
 '############################################################*/
    public static void Save() throws FileNotFoundException, IOException
    {
     Format format = Format.getCompactFormat();

        format.setEncoding("utf-8"); //设置xml文件的字符为utf-8

        format.setIndent(" "); //设置xml文件的缩进

        XMLOutputter out = new XMLOutputter(format);//元素后换行一层元素缩进
     
     out.output(doc,new FileOutputStream(XMLFile));
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值