使用jdom解析XML

1. 创建XML
package jdom.test;  
  
import java.io.File;  
import java.io.FileWriter;  
import java.util.ArrayList;  
import java.util.Arrays;  
  
import org.jdom.Document;  
import org.jdom.Element;  
import org.jdom.output.Format;  
import org.jdom.output.XMLOutputter;  
  
public class CreateXML {  
    public static void main(String[] args)throws Exception {  
        //创建DOM对象  
        Document doc = new Document();  
        //创建根节点  
        Element rootNode = new Element("users");  
          
        //创建二级节点(id=0001)  
        Element userNode1 = new Element("user");  
        //为二级节点设置属性  
        userNode1.setAttribute("id", "0001");  
          
        //创建三级节点(name)  
        Element nameNode1 = new Element("name");  
        //为三级节点设置文本  
        nameNode1.addContent("张三");  
        //创建三级节点(name)  
        Element sexNode1 = new Element("sex");  
        //为三级节点设置文本  
        sexNode1.addContent("男");  
        //创建三级节点(age)  
        Element ageNode1 = new Element("age");  
        //为三级节点设置文本  
        ageNode1.addContent("20");  
          
          
        //创建二级节点(id=0001)  
        Element userNode2 = new Element("user");  
        //为二级节点设置属性  
        userNode2.setAttribute("id", "0002");  
          
        //创建三级节点(name)  
        Element nameNode2 = new Element("name");  
        //为三级节点设置文本  
        nameNode2.addContent("李四");  
        //创建三级节点(name)  
        Element sexNode2 = new Element("sex");  
        //为三级节点设置文本  
        sexNode2.addContent("女");  
        //创建三级节点(age)  
        Element ageNode2 = new Element("age");  
        //为三级节点设置文本  
        ageNode2.addContent("25");  
          
        //添加单个节点  
        //userNode.addContent(nameNode);  
        //把三级节点添加到二级节点上  
        userNode1.addContent(new ArrayList<Element>(Arrays.asList(nameNode1,sexNode1,ageNode1)));  
        //把三级节点添加到二级节点上  
        userNode2.addContent(new ArrayList<Element>(Arrays.asList(nameNode2,sexNode2,ageNode2)));  
          
          
        //把二级节点添加到跟节点上  
        rootNode.addContent(userNode1);  
        rootNode.addContent(userNode2);  
          
        //把跟节点添加到DOM对象上  
        doc.addContent(rootNode);  
        //创建XML输出对象(XMLOutputter)  
        XMLOutputter xop = new XMLOutputter();  
        //为输出的XML定义格式  
        Format format = Format.getPrettyFormat();  
        //编码方式  
        format.setEncoding("GBK");  
        //把格式设置到输出对象中  
        xop.setFormat(format);  
        File file = new File("D:\\dd");  
        if(!file.exists()){  
            file.mkdirs();  
        }  
        //创建输出流  
        FileWriter fw = new FileWriter(file+"\\connection.xml");  
        //把xml输出  
        xop.output(doc, fw);  
        System.out.println(xop.outputString(doc));  
        //关闭输出流  
        fw.close();  
    }  
/*<?xml version="1.0" encoding="GBK"?> 
<users> 
  <user id="0001"> 
    <name>张三</name> 
    <sex>男</sex> 
    <age>20</age> 
  </user> 
  <user id="0002"> 
    <name>李四</name> 
    <sex>女</sex> 
    <age>25</age> 
  </user> 
</users>*/  
}  

2. 插入XML
package jdom.test;  
  
import java.io.File;  
import java.io.FileWriter;  
import java.util.List;  
  
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 InsertXML {  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args)throws Exception {  
        //创建XML解析器  
        SAXBuilder builder = new SAXBuilder(false);  
        //创建DOM对象  
        Document doc = builder.build("D:\\dd\\connection.xml");  
        //获得跟节点  
        Element rootNode = doc.getRootElement();  
        //获得根节点下的所有子节点  
        List<Element> elements = rootNode.getChildren("user");  
        Element zsElement = null;  
        //遍历所有子节点判断要查找的节点是否存在  
        for(Element e : elements){  
            if(e.getAttributeValue("id").equals("0003")){  
                zsElement = e;  
                break;  
            }  
        }  
        if(zsElement!=null){  
              
            Element pwdNode = new Element("pwd");  
            pwdNode.addContent("000000");  
            //追加(插入到末尾)  
            zsElement.addContent(pwdNode);  
            //插入到指定位置  
            zsElement.addContent(0, pwdNode);  
            //创建XML输出对象(XMLOutputter)  
            XMLOutputter xop = new XMLOutputter();  
            //为输出的XML定义格式  
            Format format = Format.getPrettyFormat();  
            //编码方式  
            format.setEncoding("GBK");  
            //把格式设置到输出对象中  
            xop.setFormat(format);  
            File file = new File("D:\\dd");  
            if(!file.exists()){  
                file.mkdirs();  
            }  
            //创建输出流  
            FileWriter fw = new FileWriter(file+"\\connection.xml");  
            //把xml输出  
            xop.output(doc,fw);  
            //关闭输出流  
            fw.close();  
        }  
    }  
}  

3. 修改XML
package jdom.test;  
  
import java.io.File;  
import java.io.FileWriter;  
import java.util.List;  
  
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 UpdateXML {  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args)throws Exception {  
        //创建XML解析器  
        SAXBuilder builder = new SAXBuilder(false);  
        //创建DOM对象  
        Document doc = builder.build("D:\\dd\\connection.xml");  
        //获得跟节点  
        Element rootNode = doc.getRootElement();  
        //获得根节点下的所有子节点  
        List<Element> elements = rootNode.getChildren("user");  
        Element zsElement = null;  
        //遍历所有子节点判断要查找的节点是否存在  
        for(Element e : elements){  
            if(e.getAttributeValue("id").equals("0001")){  
                zsElement = e;  
                break;  
            }  
        }  
        if(zsElement!=null){  
            //修改内容  
            //先移除  
            zsElement.getChild("name").removeContent();  
            //在添加  
            zsElement.getChild("name").addContent("王五");  
            //修改属性  
            zsElement.removeAttribute("id");  
            zsElement.setAttribute("id","0003");  
            //创建XML输出对象(XMLOutputter)  
            XMLOutputter xop = new XMLOutputter();  
            //为输出的XML定义格式  
            Format format = Format.getPrettyFormat();  
            //编码方式  
            format.setEncoding("GBK");  
            //把格式设置到输出对象中  
            xop.setFormat(format);  
            File file = new File("D:\\dd");  
            if(!file.exists()){  
                file.mkdirs();  
            }  
            //创建输出流  
            FileWriter fw = new FileWriter(file+"\\connection.xml");  
            //把xml输出  
            xop.output(doc,fw);  
            //关闭输出流  
            fw.close();  
        }  
        /* 
         <?xml version="1.0" encoding="GBK"?> 
        <users> 
          <user id="0003"> 
            <name>王五</name> 
            <sex>男</sex> 
            <age>20</age> 
          </user> 
          <user id="0002"> 
            <name>李四</name> 
            <sex>女</sex> 
            <age>25</age> 
          </user> 
        </users> 
         */  
    }  
}  

4. 删除XML
package jdom.test;  
  
import java.io.File;  
import java.io.FileWriter;  
import java.util.List;  
  
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 DeleteXML {  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args)throws Exception {  
        //创建XML解析器  
        SAXBuilder builder = new SAXBuilder(false);  
        //创建DOM对象  
        Document doc = builder.build("D:\\dd\\connection.xml");  
        //获得跟节点  
        Element rootNode = doc.getRootElement();  
        //获得根节点下的所有子节点  
        List<Element> elements = rootNode.getChildren("user");  
        Element zsElement = null;  
        //遍历所有子节点判断要查找的节点是否存在  
        for(Element e : elements){  
            if(e.getAttributeValue("id").equals("0001")){  
                zsElement = e;  
                break;  
            }  
        }  
        if(zsElement!=null){  
            //删除某个节点下节点名是name的第一个子节点  
            zsElement.removeChild("name");  
            //删除某个节点下节点名是name的所有子节点  
            //zsElement.removeChildren("name");  
            //删除属性名称是id的属性  
            //zsElement.removeAttribute("id");  
            //删除该节点下的所有内容  
            //zsElement.removeContent();  
              
            //创建XML输出对象(XMLOutputter)  
            XMLOutputter xop = new XMLOutputter();  
            //为输出的XML定义格式  
            Format format = Format.getPrettyFormat();  
            //编码方式  
            format.setEncoding("GBK");  
            //把格式设置到输出对象中  
            xop.setFormat(format);  
            File file = new File("D:\\dd");  
            if(!file.exists()){  
                file.mkdirs();  
            }  
            //创建输出流  
            FileWriter fw = new FileWriter(file+"\\connection.xml");  
            //把xml输出  
            xop.output(doc,fw);  
            //关闭输出流  
            fw.close();  
        }  
    }  
}  

5. 查询XML
package jdom.test;  
  
import java.util.List;  
  
import org.jdom.Document;  
import org.jdom.Element;  
import org.jdom.input.SAXBuilder;  
  
public class SelectXML {  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args)throws Exception {  
        //创建XML解析器  
        SAXBuilder builder = new SAXBuilder(false);  
        //创建DOM对象  
        Document doc = builder.build("D:\\dd\\connection.xml");  
        //获得跟节点  
        Element rootNode = doc.getRootElement();  
        //获得根节点下的所有子节点  
        List<Element> elements = rootNode.getChildren("user");  
        Element zsElement = null;  
        //遍历所有子节点判断要查找的节点是否存在  
        for(Element e : elements){  
            if(e.getAttributeValue("id").equals("0003")){  
                zsElement = e;  
                break;  
            }  
        }  
        if(zsElement!=null){  
            //获得属性  
            String id = zsElement.getAttributeValue("id");  
            //获得子节点的值  
            String name = zsElement.getChildText("name");  
            System.out.println(id);  
            System.out.println(name);  
        }  
    }  
}  


XMLOutputter XMLOut = new XMLOutputter("    ",  true);  

把这句代码直接在构造函数里贴上可以解决JDOM生成XML的换行问题。

参考:
http://zyw090111.iteye.com/blog/706850
http://xi5566.iteye.com/blog/215501

你可能感兴趣的:(java,xml,Blog)