jdom操作Xml示例

来源:互联网 发布:windows svn 命令行 编辑:程序博客网 时间:2024/05/20 01:07

import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.util.List;

import org.jdom.xpath.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.*;

/**
 * 使用JDOM操作XML文件示例
 * 步骤:
 * 1、去www.jdom.org下载jdom 1.0,也只有这个版本,因为作为觉得简单的才是最好的,除非XML更改才会对程序更行更改
 * 2、准备XML文件,将放在指定的目录下:
 * <?xml version="1.0" encoding="UTF-8" ?>
    <student>
    <user>
        <id>1</id>
        <name>test_boy</name>
        <age>23</age>
        <sex>boy</sex>
    </user>
    <user>
        <id>2</id>
        <name>test_girl</name>
        <age>20</age>
        <sex>girl</sex>
    </user>
    </student>
 × 3、将代码放进去,直接运行并查看结果,就OK了
 */
public class JDomTest
{
  String xmlPath = "e://Mickey//test.xml";//原文件,必须存在
  String xmlPath_out = "e://Mickey//test1.xml";//目标文件,可不存在
  //建立SAXBuilder对象
  SAXBuilder builder = new SAXBuilder();
  //建立文档对象,也就是XML文件对象
  Document document;
  public JDomTest()
  {
    try
    {
      //用XMLBuilder对象建立即build一个文件输入流,成为该文档对象
      document = builder.build(new FileInputStream(xmlPath));
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return;
    }
  }
  public void delByID(String id)
  {
   
  }
  public static void main(String[] args)
  {   
    JDomTest jDomTest=new JDomTest();   
    //获得文档的根元素,这里就是获得"student"
    Element root = jDomTest.document.getRootElement();
    System.out.println("root element is:" + root);
    XPath xPath;
    //取得根原下面所有字根,将放于List集合中
    try
    {    
      //List l=XPath.selectNodes(root,"");
      //System.out.println("查找结果:"+l.size());
      //用这个XPath的时候,还不知道还要把JDom/lib下面全部的类导入
      //还编辑了不少时间,这是JDom和其它的jar文件不一样的地方
      XPath servletPath = XPath.newInstance("/student/user/id[text()='1']");//查找id=1的是不是存在
      List l = servletPath.selectNodes(jDomTest.document);
      System.out.println("查找结果:"+l.size());
      for(int i=0;i<l.size();i++)
      {
        Element e=(Element)l.get(i);
        String id=e.getText();       
        System.out.println("id:"+id);
      }
    }
    catch (JDOMException e)
    {
      e.printStackTrace();
    }
    List list = root.getChildren();
    for (int i = 0; i < list.size(); i++)
    {
      System.out.println("XXX");
      StringBuffer buf = new StringBuffer();
      //取得当前第i个元素,这里指的“二级根”
      Element e = (Element) list.get(i);
    
      Attribute attribute=new Attribute("Ok","yes");
      e.setAttribute(attribute);
      //取得对应的“二级根”面的对应的元素名
      Element e_id = e.getChild("id");
      //取得对应的值
      String id = e_id.getText();
      Element e_name = e.getChild("name");
      String name = e_name.getText();
      Element e_age = e.getChild("age");
      String age = e_age.getText();
      Element e_sex = e.getChild("sex");
      String sex = e_sex.getText();
      //增加一个major项
      Element e_add=new Element("major");
      //赋值
      e_add.setText("Computer");
      //加到“二级根”下
      e.addContent(e_add);
     
      buf.append("id:" + id).append(" name:" + name).append(" age:" +
                                                            age).append(" sex:" +
                                                                        sex);
      System.out.println(buf);
      //这里删除一个Content后,此时将不再进行第二个循环,运行完该循环的最后一条语句直接通出
      root.removeContent(e);
      System.out.println("XXX");
    }
    //增加一个“二级根”,并赋值
    Element oneChild=new Element("user");
    //增加一个属性
    Attribute a=new Attribute("ComeFrom","BeiJing");
    oneChild.setAttribute(a);
    root.addContent(oneChild);
    Element e_id = new Element("id");
    e_id.setText("3");
    //取得对应的值
    Element e_name = new Element("name");
    e_name.setText("temp");
    Element e_age = new Element("age");
    e_age.setText("30");
    Element e_sex = new Element("sex");
    e_sex.setText("girl");
    oneChild.addContent(e_id);
    oneChild.addContent(e_name);
    oneChild.addContent(e_age);
    oneChild.addContent(e_sex);
   
    //输入出当前读入的XML文件到另一个文件中
    XMLOutputter out = new XMLOutputter();
    try
    {
      //建立文件输出流,将读入的文件,定到目标文件中去
      out.output(jDomTest.document, new FileOutputStream(jDomTest.xmlPath_out));
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    System.exit(0);
  }
}

原创粉丝点击