`
chenzhuo1016
  • 浏览: 26424 次
  • 来自: ...
社区版块
存档分类
最新评论

jdom学习(6)

    博客分类:
  • xml
XML 
阅读更多
练习使用Jdom处理XML
package sunstar.chenzhuo.jdom;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
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;
import org.jdom.xpath.XPath;

/**
 *
 * @Description        练习使用jdom处理XML文件
 * @Author             chenzhuo 
 * @Date               2007-1-25
 *
 */
public class JdomUtils {

    /**
     * @param args
     */
    public static void main(String[] args) {
         
        String xmlText = "
xml 代码
 
  1. <document><students><student><name>张三</name><sex></sex><age>23</age></student></students></document>  
";
        String fileName = "h:/20070125/test/test.xml";       
        writeTextToXml(xmlText, fileName);           
       
        Element node = new Element("student");
        Element name = new Element("name");
        Element sex = new Element("sex");
        Element age = new Element("age");
        name.setText("王五");
        sex.setText("女");
        age.setText("23");
        node.addContent(name);
        node.addContent(sex);
        node.addContent(age);
        String parentNodeName = "students";
        int parentIndex = 0;
        int addIndex = 3;       
       
        addNode(fileName, node, parentNodeName, parentIndex, addIndex);
       
        Element students = new Element("students");
        Element student = new Element("student");
        Element name2 = new Element("name");
        name2.setText("王三");
        //在这里student节点不能再使用name节点了(因为它已经被node节点使用了)!!!
        student.addContent(name2);
        students.addContent(student);
        addNode(fileName, students, "document", 0, 2);
       
        removeNode(fileName, "students", 1, 1);
    }
   
    /**
     * <P>Description:                       在指定的xml文件中删除某个节点(按指定的位置)</P>
     * @param fileName                     指定xml文件名
     * @param parentNodeName               指定要删除节点的父节点名称
     * @param parentIndex                  指定要删除节点父节点的索引位置(索引从零开始)
     * @param removeIndex                  指定要删除节点的索引位置(索引从零开始,包含文本节点)
     */
    public static void removeNode(String fileName,String parentNodeName,int parentIndex,int removeIndex)
    {
        SAXBuilder builder = new SAXBuilder();
        File file = new File(fileName);
        BufferedReader in = null;
        BufferedWriter wr = null;
        Document doc = null;
        try{
            in = new BufferedReader(new FileReader(file));
            doc = builder.build(in);
            XPath path = XPath.newInstance("//" + parentNodeName);
           
            Element parentNode = (Element) path.selectNodes(doc).get(parentIndex);
            parentNode.removeContent(removeIndex);
           
            wr = new BufferedWriter(new FileWriter(fileName));
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
            out.output(doc, wr);
           
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null)
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
   
    /**
     * <P>Description:                   在指定的xml文件中添加一个节点(规定添加的位置)</P>
     * @param fileName                   指定xml文件名
     * @param node                       指定需要添加的节点元素
     * @param parentNodeName             指定父节点的名称
     * @param parentIndex                指定父节点的索引位置(索引从零开始)
     * @param addIndex                   指定添加节点在父节点下的索引位置(索引从零开始,包含文本节点)
     */
    public static void addNode(String fileName, Element node, String parentNodeName, int parentIndex, int addIndex) {
       
        SAXBuilder builder = new SAXBuilder();
        File file = new File(fileName);
        BufferedReader in = null;
        BufferedWriter wr = null;
        Document doc = null;
        try {
            in = new BufferedReader(new FileReader(file));
            doc = builder.build(in);
            Element  parent = null;
//            Iterator itr =  doc.getDescendants(new ElementFilter(parentNodeName));
//            for(int i = 0;itr.hasNext() && i < parentIndex;i++)
//            {
//                parent = (Element) itr.next();
//            }
           
            XPath path = XPath.newInstance("//" + parentNodeName);
            parent = (Element) path.selectNodes(doc).get(parentIndex);
           
            parent.addContent(addIndex, node);           
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
           
            wr = new BufferedWriter(new FileWriter(fileName));
            out.output(doc,wr);
           
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null)
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * <P>Description:            获取一个经过一般格式规范的XMLOupputter</P>
     * @param encoding TODO
     * @param indent TODO
     * @return
     */
    public static XMLOutputter getXMLOutputterWithFormat(String encoding, String indent) {
        Format format = Format.getCompactFormat();
         //设置xml文件的字符为gb2312
        format.setEncoding(encoding);
        //设置xml文件的缩进为4个空格
        format.setIndent(indent);
        XMLOutputter out = new XMLOutputter(format);
        return out;
    }
   
    /**
     * <P>Description:     将一个xml格式的字符串(该字符串中不能含有xml中的特殊字符,如:"&")写入到指定的xml文件中</P>
     * @param              xmlText
     * @param              fileName
     */
    public static void writeTextToXml(String xmlText, String fileName) {       
       
        BufferedReader in = new BufferedReader(new StringReader(xmlText));
       
        SAXBuilder builder = new SAXBuilder();
        Document doc = new Document();
        File file = new File(fileName);       
        FileWriter wr = null;
       
        try {
            doc = builder.build(in);
            XMLOutputter out = getXMLOutputterWithFormat("GBK", "  ");
           
            if(!file.exists())
            {
                file = FileUtils.createFile(fileName);
            }
            wr = new FileWriter(file);
            out.output(doc, wr);           
           
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(in != null)
            {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
            if(wr != null )
            {
                try {
                    wr.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
           
        }
    }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics