Jdom操作、创建和解析XML

 需要导入Jdom的一个jar包;

1、Jdom创建XML

package com.shengsiyuan.jdom;

import java.io.FileWriter;

import org.jdom.Attribute;
import org.jdom.Comment;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class JDomTest1
{
 public static void main(String[] args) throws Exception
 {
        //创建文档
  Document document = new Document();
        //创建文档根元素
  Element root = new Element("root");
        //向文档呢添加根元素
  document.addContent(root);
  //添加注释
  Comment comment = new Comment("This is my comments");
        //在根元素下添加注释
  root.addContent(comment);
        //创建一个元素
  Element e = new Element("hello");
        //给元素添加属性的第一种方式,它有返回值,返回一个Element对象
  e.setAttribute("sohu", "www.sohu.com");
        //给根元素添加属性
  root.addContent(e);

  Element e2 = new Element("world");
        //创建元素属性的第二种方式
  Attribute attr = new Attribute("test", "hehe");
        //给元素添加属性
  e2.setAttribute(attr);
        //将元素添加到根元素下
  e.addContent(e2);
        //添加元素属性和文本内容,属于方法链的编程风格
  e2.addContent(new Element("aaa").setAttribute("a", "b")
    .setAttribute("x", "y").setAttribute("gg", "hh").setText("text content"));

  //设置其格式,一般还有一个没有缩进与空格的格式getRawFormat,主要用于XML的网络传输,因为它没有空格,减少网络传输的数据量。
  Format format = Format.getPrettyFormat();
  
  //设置元素前面空格
  format.setIndent("    ");
  //设置编码方式
//  format.setEncoding("gbk");
  //将XML文档输出
  XMLOutputter out = new XMLOutputter(format);
  out.output(document, new FileWriter("jdom.xml"));

 }
}

 

2、Jdom解析XML

package com.shengsiyuan.jdom;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

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

public class JDomTest2
{
 public static void main(String[] args) throws Exception
 {
  //JDOM从XML中解析
  SAXBuilder builder = new SAXBuilder();
  //获得XML文档对象
  Document doc = builder.build(new File("jdom.xml"));
  //得到文档根元素
  Element element = doc.getRootElement();
  
  System.out.println(element.getName());
  //得到根元素下的hello元素
  Element hello = element.getChild("hello");
  
  System.out.println(hello.getText());
  //得到hello子元素下的属性
  List list = hello.getAttributes();
  
  //得到hello元素下属性的名字和值
  for(int i = 0 ;i < list.size(); i++)
  {
   Attribute attr = (Attribute)list.get(i);
   
   String attrName = attr.getName();
   String attrValue = attr.getValue();
   
   System.out.println(attrName + "=" + attrValue);
  }
  //删除hello下的world子元素
  hello.removeChild("world");
  
  //将文档保存到另一个文件
  XMLOutputter out = new XMLOutputter(Format.getPrettyFormat().setIndent("    "));
  
  out.output(doc, new FileOutputStream("jdom2.xml"));  
  
 }
}

 

3、综合实例

package cn.com.xmltest;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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

public class XMLTest
{
 public static void main(String[] args)
 {
  modifyXML();
 }

 public static void createXML()
 {
  Element root = new Element("学生信息");
  Element stu1 = new Element("学生");
  Element stu2 = new Element("学生");
  Element name1 = new Element("姓名");
  Element sex1 = new Element("性别");
  Element age1 = new Element("年龄");
  Element name2 = new Element("姓名");
  Element sex2 = new Element("性别");
  Element age2 = new Element("年龄");

  name1.setText("小明");
  sex1.setText("男");
  age1.setText("19");

  name2.setText("小花");
  sex2.setText("女");
  age2.setText("20");

  root.addContent(stu1);
  root.addContent(stu2);
  stu1.addContent(name1);
  stu1.addContent(sex1);
  stu1.addContent(age1);
  stu2.addContent(name2);
  stu2.addContent(sex2);
  stu2.addContent(age2);

  Document doc = new Document(root);
  Format f = Format.getPrettyFormat();
  f.setEncoding("gb2312");
  XMLOutputter out = new XMLOutputter(f);

  try
  {
   out.output(doc, new FileOutputStream(new File("c:/myxml.xml")));
  }
  catch (FileNotFoundException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }

 }

 public static void searchXML()
 {
  SAXBuilder build = new SAXBuilder();
  try
  {
   Document doc = build.build("c:/myxml.xml");
   Element e = doc.getRootElement();

   List<Element> list = e.getChildren();
   for (Element ele : list)
   {
    System.out.println(ele.getChild("姓名").getName() + ":"
      + ele.getChild("姓名").getText());
    System.out.println(ele.getChild("性别").getName() + ":"
      + ele.getChild("性别").getText());
    System.out.println(ele.getChild("年龄").getName() + ":"
      + ele.getChild("年龄").getText());
   }
  }
  catch (JDOMException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }
 
 public static void addElement()
 {
  SAXBuilder build=new SAXBuilder();
  try
  {
   Document doc=build.build("c:/myxml.xml");
   Element root=doc.getRootElement();
   Element stu=root.getChild("学生");
   Element cla=new Element("班级");
   cla.addContent("2班");
   stu.addContent(cla);
   XMLOutputter out=new XMLOutputter();
   out.output(doc,new FileOutputStream(new File("c:/myxml.xml")));
   
 
  }
  catch (JDOMException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
  
 }
 
 public static void modifyXML()
 {
  SAXBuilder build=new SAXBuilder();
  Document doc;
  try
  {
   doc = build.build("c:/myxml.xml");
   Element root=doc.getRootElement();
   Element stu=root.getChild("学生");
   Element age=stu.getChild("年龄2");
      age.setName("年龄");
   age.setText("10");
   List<Element> list=stu.getChildren();
  
   for(Element e:list)
   {
    if(e.getName().equals(""));
//    {
     Element height=new Element("身高");
     height.setText("175厘米");
     root.addContent(height);
//         stu.removeChild(str);
//    }
   }
   XMLOutputter out=new XMLOutputter();
   out.output(doc,new FileOutputStream(new File("c:/myxml.xml")));
  }
  catch (JDOMException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值