欢迎光临
我们一直在努力

java 的jdom使用类-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

 

/*************************************************************
* 功能完成对xml文件的 建立,增,删,改,显示,查找(值比对)
* 现在只支持二级标签生成
* <根>
*   <一级标签>
*     <二级标签>值<二级标签/>
*     <二级标签>值<二级标签/>
*   <一级标签/>
* <根/>
* main()         为使用小样
* **************************************************************
* @author        sanshi
* create         2005/06/09
* 感谢:          张山,梅春,花开石头(任何帮助:包括精神虐待和肉体蹂躏)
* ***************************************************************
* @param filename 文件名
* @param create   文件不存在是否建立,默认为false(不建立)
* @param root     建立文件使用,代表根元素
* @param child    建立文件使用,代表一级标签
* @param twochild 建立文件使用,代表二级标签。样式a[0][0]=”标签名”,a[0][1]=”标签值”
* @param debug    是否打印调试信息,对整个类有作用,默认为false不打印
*/

import org.jdom.output.xmloutputter;
import org.jdom.document;
import org.jdom.element;

import java.util.list;
import org.jdom.output.format;
import org.jdom.input.saxbuilder;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.fileinputstream;

public class xmlwork {
  private string filename; //文件名
  private boolean create = false; //文件不存在是否建立
  private string root; //xml的根
  private string child; //一级标签
  private string[][] twochild; //二级标签
  private boolean debug = true; //是否打印调试信息

/**********************调试开始***********************************/
  public static void main(string args[]) {
    string[][] a = new string[2][2];
    a[0][0] = “name”;
    a[0][1] = “sanshi”;
    a[1][0] = “count”;
    a[1][1] = “1”;
    xmlwork t = new xmlwork();
    t.xmlwork(“zl.xml”, 2, true); //第一步设置参数
    t.settga(“root”, “child”, a); //建立文件设置标签
    //t.creatxmlfile();
    string[] value = new string[2];
    value[0] = “sanshi”;
    value[1] = “3”;
    t.showallelement(1,0);//

    if(t.isfindelement(value))
    {
      system.out.println(“找到了!”);
    }else{
      system.out.println(“没找到!”);
    }
    //t.editxmlelement(0,value);
    //t.addxmlelement(value);
    //t.delectxmlelement(0);
  }
/*************************调试结束*******************************/

  /**
   * 设置是否打印调试信息
   * @param boolean debug false/不打印 ture/打印
   */
  public void setdebug(boolean debug) {
    this.debug = debug;
  }

  /**
   * 取得当前的调试信息
   * @return boolean
   */
  public boolean getdebug() {
    return debug;
  }

  //判断文件名和一些常用变量是否存在
  public boolean istrue() {
    boolean check = true;
    if (filename == null || root == null || child == null ||
        twochild.length <= 0) {
      check = false;
    }
    return check;
  }

  //初始化
  public xmlwork() {}

  /**
   * 判断输入文件名的合法性
   * @param string  filename  文件名字/打开或者建立
   * @param int     list      二级标签的大小
   * @param booleam crrate    如果不存在是否建立新文件
   */
  public void xmlwork(string filename, int list, boolean create) {
    if (filename == null || filename.length() <= 0) {
      system.out.println(“你没有输入文件名”);
      system.exit(0);
    }
    else if (filename.indexof(“.xml”) <= 0) {
      system.out.println(“你输入文件名不正确”);
      system.exit(0);
    }
    else {
      this.filename = filename;
      this.create = create;
      string[][] children = new string[list][list];
      this.twochild = children;
      //调试信息输出
      if (debug) {
        system.out.println(“文件名设置成功=====>” + filename);
        system.out.println(“二级标签共有=======>” + list + “个”);
      }
    }
  }

  //标签设置
  public void settga(string root, string child, string[][] twochild) {
    if (root == null || child == null) {
      system.out.println(“你没有输入根标签或者是一级标签”);
      system.exit(0);
    }
    else if (twochild.length <= 0) {
      system.out.println(“你没有输入二级标签”);
      system.exit(0);
    }
    else {
      this.root = root;
      this.child = child;
      this.twochild = twochild;
      if (debug) { //调试信息输出
        system.out.println(“标签设置成功!”);
        system.out.println(“根标签为==>” + root);
        system.out.println(“一级标签为==>” + child);
        system.out.println(twochild[0][0] + “====>” + twochild[0][1]);
        system.out.println(twochild.length);
      }
    }
  }

  //判断您传递近来的文件是否为有效
  private boolean isfile() {
    file file = new file(filename);
    return file.exists();
  }

  public void printdebug() {
    if (!istrue()) {
      system.out.println(“缺少参数”);
      system.exit(0);
    }
    if (isfile()) {
      //system.out.println(“文件文法打开”);
      //system.exit(0);
    }
  }

  public void creatxmlfile() {
    printdebug();
    //这以下根据需求更改——开始
    element newroot = new element(root); //设置根标签
    element newchild = new element(child); //设置单元标签//根下一级
    for (int i = 0; i < twochild.length; i++) {
      element count = new element(twochild[i][0]); //根下二级
      count.settext(twochild[i][1]); //设置二级标签的值<二级标签>值<二级标签/>
      //count.setattribute( “属性名”, “属性值” );//添加一个属性
      newchild.addcontent(count); //把二级添加到一级
    }
    newroot.addcontent(newchild); //把一级添加到根
    document doc = new document(newroot); //把根写到document
    //设置生成wml
    //doc.setdoctype(new doctype(“wml”,”-//wapforum//dtd wml 1.1//en”,”http://www.wapforum.com/dtd/wml_1.1.xml“));
    //根据需求更改结束
    xmloutputter xmlout = new xmloutputter(); //生成xml的输出流
    format format = xmlout.getformat(); //把输出流格式化
    format.setencoding(“gbk”); //设置字符集
    format.setexpandemptyelements(true); //是否填充
    xmlout.setformat(format); //把格式化的流给输出流
    try {
      //生成xml的文件,文件名为用户输入的文件
      xmlout.output(doc, new fileoutputstream(filename));
      system.out.println(“文件建立成功文件名===>” + filename);
    }
    catch (ioexception ex) {
      system.out.println(“file create failing” + ex.getmessage());
    }
  }

  /**
   * 此方法只是增加固定标签的值,在最后添加,如果文件不存在,而同意建立的话话建立
   * @param string[] value 添加值的数组,按二级标签顺序存放
   */
  public void addxmlelement(string[] value) {
    printdebug();
    if (!this.isfile() && create) { //打开失败建立
      creatxmlfile();
    }
    //开始添加
    fileinputstream fi = null; //文件输入流
    fileoutputstream fo = null; //文件输出流
    file file = new file(filename);
    try {
      fi = new fileinputstream(file); //建立打开流
      saxbuilder sb = new saxbuilder();
      document doc = sb.build(fi); //把文件流给build
      element root = doc.getrootelement(); //得到根元素
      list childsum = root.getchildren(); //得到根元素的集合
      element newchild = new element(child);
      for (int i = 0; i < twochild.length; i++) {
        //生成新元素
        element newcount = new element(twochild[i][0]);
        newcount.settext(value[i]);
        newchild.addcontent(newcount); //在新根下添加新元素
      }
      childsum.add(newchild); //在xml文件里添加新的东西
      xmloutputter xmlout = new xmloutputter();
      format format = xmlout.getformat();
      format.setencoding(“gbk”); //设置字符集
      format.setexpandemptyelements(true); //打开添加
      format.setindent(” “); //设置分割符
      //format.setomitdeclaration(true);//是否添加头信息
      xmlout.setformat(format);
      fo = new fileoutputstream(file);
      xmlout.output(doc, fo);
      if (debug) {
        system.out.println(“添加成功”);
      }
    }
    catch (exception e) {
      system.out.println(“文件打开失败,文件名为:” + filename + “<==>错误原因为:” +
                         e.getmessage());
    }
    finally {
      try {
        fi.close();
        fo.close();
      }
      catch (exception e) {
        e.printstacktrace();
      }
    }
  }

  /**
   * 此方法删除指定的值,也就是xml中的第几个孩子
   * @param elementid  为孩子id。xml默认从0开始
   */
  public void delectxmlelement(int elementid) {
    //printdebug();
    fileinputstream fi = null; //文件输入流
    fileoutputstream fo = null; //文件输出流
    file file = new file(filename);
    try {
      if (!this.isfile()) { //文件打开失败
        system.out.println(“文件打开失败,文件名为:” + filename);
      }
      else {
        fi = new fileinputstream(file); //建立打开流
        saxbuilder sb = new saxbuilder();
        document doc = sb.build(fi); //把文件流给build
        element root = doc.getrootelement(); //得到根元素
        list childsum = root.getchildren(); //得到根元素的集合
        if (elementid >= childsum.size()) {
          system.out.println(“超过长度!”);
          system.exit(0);
        }
        childsum.remove(elementid);
        xmloutputter xmlout = new xmloutputter();
        format format = xmlout.getformat();
        format.setencoding(“gbk”); //设置字符集
        format.setexpandemptyelements(true); //打开添加
        format.setindent(” “); //设置分割符
        //format.setomitdeclaration(true);//是否添加头信息
        xmlout.setformat(format);
        fo = new fileoutputstream(file);
        xmlout.output(doc, fo);
        if (debug) {
          system.out.println(“删除成功”);
        }
      }
    }
    catch (exception e) {
      system.out.println(“文件打开失败,文件名为:” + filename + “<==>错误原因为:” +
                         e.getmessage());
    }
    finally {
      try {
        fi.close();
        fo.close();
      }
      catch (exception e) {
        e.printstacktrace();
      }
    }
  }

  /**
   * 此方法编辑指定的值,也就是xml中的第几个孩子
   * @param elementid  为孩子id。xml默认从0开始
   * @param value      数组为修改为的值
   */
  public void editxmlelement(int elementid, string[] value) {
    fileinputstream fi = null; //文件输入流
    fileoutputstream fo = null; //文件输出流
    try {
      if (!this.isfile()) { //文件打开失败
        system.out.println(“文件打开失败,文件名为:” + filename);
      }
      else {
        fi=new fileinputstream(filename);//建立打开流
        saxbuilder sb=new saxbuilder();
        document doc=sb.build(fi);//把文件流给build
        element root=doc.getrootelement();//得到根元素
        list childsum=root.getchildren();//得到根元素的集合
        if (elementid >= childsum.size()) {
          system.out.println(“超过长度!”);
          system.exit(0);
        }
        element edit=(element)childsum.get(elementid);//选择编辑元素
        for(int i = 0; i < twochild.length; i++){
          element newname=edit.getchild(twochild[i][0]);//生成新的标签
          newname.settext(value[i]);//设置新值
        }
        childsum.set(elementid,edit);//修改
        xmloutputter xmlout=new xmloutputter();
       format format=xmlout.getformat();
       //format.setencoding(“gbk”);
       format.setexpandemptyelements(true);
       format.setindent(” “);
       //format.setomitdeclaration(true);
       xmlout.setformat(format);
       fo=new fileoutputstream(filename);
       xmlout.output(doc,fo);
       if (debug) {
        system.out.println(“编辑成功”);
       }
      }
    }
    catch (exception e) {
      system.out.println(“文件打开失败,文件名为:” + filename + “<==>错误原因为:” +
                         e.getmessage());
    }
    finally {
      try {
        fi.close();
        fo.close();
      }
      catch (exception e) {
        e.printstacktrace();
      }
    }
  }

  /**
   *@param int start     传入开始输出的项
   *@param int end       结束输出的项,为0表示最后一个。
   */
  public void showallelement(int start,int end)
  {
    fileinputstream fi = null; //文件输入流
    //fileoutputstream fo = null; //文件输出流
    try{
      if (!this.isfile()) { //文件打开失败
       system.out.println(“文件打开失败,文件名为:” + filename);
     }
      fi=new fileinputstream(new file(filename));//建立打开流
      saxbuilder sb=new saxbuilder();
      document doc=sb.build(fi);//把文件流给build
      element root=doc.getrootelement();//得到根元素
      list childsum=root.getchildren();//得到根元素的集合

      if(childsum.size()==0)
      {
        system.out.println(“该文件没有内容!文件名为===>”+filename);
        system.exit(1);
      }

      if(end==0)
      {
        end=childsum.size();
      }
      if(start<0||end>childsum.size()||start==end||start>end)
      {
        system.out.println(“输入参数有错误==>start=”+start+”||==>end=”+end);
        system.exit(0);
      }
      for(int i=start;i<end;i++)
      {
           element ch=(element)childsum.get(i);
           for(int j=0;j<twochild.length;j++)
           {
             string p = ch.getchild(twochild[j][0]).gettext();
             system.out.println(p);
           }
      }
      if(debug)
      {
        system.out.println(“输出完成”);
      }
    }catch (exception e) {
      system.out.println(“文件打开失败,文件名为:” + filename + “<==>错误原因为:” +
                         e.getmessage());
    }
    finally {
      try {
        fi.close();
        //fo.close();
      }
      catch (exception e) {
        e.printstacktrace();
      }
    }
  }

  /**
   *@param string[]  value   为比对的值对
   * @return boolean         是否查找成功
   * */
  public boolean isfindelement(string[] value)
  {
    fileinputstream fi = null; //文件输入流
    //fileoutputstream fo = null; //文件输出流
     boolean count=true;
    try{
      if (!this.isfile()) { //文件打开失败
       system.out.println(“文件打开失败,文件名为:” + filename);
     }
      fi=new fileinputstream(new file(filename));//建立打开流
      saxbuilder sb=new saxbuilder();
      document doc=sb.build(fi);//把文件流给build
      element root=doc.getrootelement();//得到根元素
      list childsum=root.getchildren();//得到根元素的集合

      if(childsum.size()==0)
      {
        system.out.println(“该文件没有内容!文件名为===>”+filename);
        system.exit(1);
      }

      for(int i=0;i<childsum.size();i++)
      {
        count=true;

           element ch=(element)childsum.get(i);
           for(int j=0;j<twochild.length;j++)
           {
             string p = ch.getchild(twochild[j][0]).gettext();
             if(!p.equals(value[j]))
             {
               count=false;
             }
           }
           if(count)
           {
             return count;
           }
      }

      if(debug)
      {
        system.out.println(“查找完成”);
      }
    }
    catch (exception e) {
      system.out.println(“文件打开失败,文件名为:” + filename + “<==>错误原因为:” +
                         e.getmessage());
    }

    finally {
      try {
        fi.close();
        //fo.close();
      }
      catch (exception e) {
        e.printstacktrace();
      }
    }
    return count;
  }
}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » java 的jdom使用类-JSP教程,Java技巧及代码
分享到: 更多 (0)