用java操作xml文件

来源:互联网 发布:迪杰斯特拉算法伪代码 编辑:程序博客网 时间:2024/06/05 19:44

需要的jar包: dom4j.jar

package nxs;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * 修改XML文件 *  * @author Yuk *  */public class DealNxsXml {    /**     * 操作XML文件     */    public static void main(String[] args) {        updateXml();    }    public static void updateXml() {        // XML文件地址        String xmlUrl = "D:/SoftwareDevelop/MyEclipse2013/Workspaces/test1/湖北农信社OA对接.xml";        File f = new File(xmlUrl);        SAXReader reader = new SAXReader();        Document doc = null;        try {            // 读取XML文件            doc = reader.read(f);        } catch (Exception e) {        }        // 获取文档的根节点        Element root = doc.getRootElement();        // 1.先执行删除节点,只保留第一个object子节点        //deletdNode(root);        // 2.修改第一个object子节点属性值,先获取字段名、字段值,获取一次执行一次        /*         * String name = "归档年度"; String value = "一万年";         * listNodes(root,name,value);         */        // 3.添加节点及元素,可能有多个电子文件,获取一次执行一次、        for (int i = 0; i < 2; i++) {            String wjXh = "1";// 序号            String wjName = "九寨沟地震";// 计算机文件名            String wjUrl = "www.baidu.com";// 文件地址            addNode(root, wjXh, wjName, wjUrl);        }        // 4.将更新后的XML写入原地址        writeDoc(doc, xmlUrl);    }    /**     * 1..删除除了第一个object子节点节点以外的其他子节点     *      * @param node     *            根节点     * @return true 删除节点成功     *      */    public static void deletdNode(Element node) {        node = node.element("object");// 得到第一个object标签        List<Element> list = new ArrayList<Element>();        Iterator<Element> it = node.elementIterator();        while (it.hasNext()) {            // 获取某个子节点对象            Element e = it.next();            // System.out.println(e.getName());            if (e.getName().equals("object")) {                // 如果子节点为object,添加进list                list.add(e);            }        }        for (int i = 0; i < list.size(); i++) {            // 删除第一个object节点下的所有子节点object            //node.remove(list.get(i));            list.get(i).detach();        }    }    /**     * 2.修改根节点属性,遍历当前节点元素下面的所有(元素的)子节点     *      * @param node     *            根节点     */    public static void listNodes(Element node, String name, String value) {        System.out.println("当前节点的名称:" + node.getName());        // 获取当前节点的所有属性节点        List<Attribute> list = node.attributes();        // 遍历属性节点        for (Attribute attr : list) {            System.out.println(attr.getName() + "---" + attr.getValue());            /*             * if (attr.getName().equals("target")) { List<Attribute> attrList =             * node.selectNodes("@target"); Iterator<Attribute> i =             * attrList.iterator(); while (i.hasNext()) { Attribute attribute =             * i.next(); attribute.setValue("666666"); } }             */            if (attr.getValue().equals(name)) {                List<Attribute> attrList = node.selectNodes("@value");                Iterator<Attribute> i = attrList.iterator();                while (i.hasNext()) {                    Attribute attribute = i.next();                    attribute.setValue(value);                }            }        }        if (!(node.getTextTrim().equals(""))) {            System.out.println("文本内容::::" + node.getText());        }        // 当前节点下面子节点迭代器        Iterator<Element> it = node.elementIterator();        // 遍历        while (it.hasNext()) {            // 获取某个子节点对象            Element e = it.next();            // 对子节点进行遍历            listNodes(e, name, value);        }    }    /**     * 3.添加节点及元素     *      * @param node     *            节点     */    public static void addNode(Element node, String xh, String computerName,            String url) {        Element praentElement = null;// 头节点        // 在第一个object节点下新增子节点object        praentElement = node.element("object").addElement("object");        // 添加节点元素元素        praentElement.addAttribute("type", "电子文件");        Element childElement = null;// 子节点        // 在object节点下新增子节点property        childElement = praentElement.addElement("property");        // 添加节点元素        childElement.addAttribute("name", "序号");        childElement.addAttribute("value", xh);        childElement = praentElement.addElement("property");        childElement.addAttribute("name", "计算机文件名");        childElement.addAttribute("value", computerName);        childElement = praentElement.addElement("property");        childElement.addAttribute("name", "电子文件");        childElement.addAttribute("value", url);    }    /**     * 4.将更新的XML写入     *      * @param doc     *            XML内容     */    public static void writeDoc(Document doc, String url) {        // 输出XML,文档中含有中文,设置编码格式写入的形式        OutputFormat format = OutputFormat.createPrettyPrint();// 创建文件输出的时候,自动缩进的格式        format.setEncoding("GB2312");// 设置编码        XMLWriter writer = null;        try {            writer = new XMLWriter(new FileWriter(url), format);        } catch (IOException e1) {        }        try {            writer.write(doc);        } catch (IOException e) {        }        try {            writer.close();        } catch (IOException e) {        }    }}

示例文件:湖北农信社OA对接.xml

<?xml version="1.0" encoding="GB2312"?><archive target="666666">  <object type="文件">    <property name="登记号" value="喻康"/>    <property name="归档年度" value="一万年"/>    <property name="文号" value=""/>    <property name="题名" value=""/>    <property name="副题名" value=""/>    <property name="文件形成时间" value="20170606 如这种8位数字"/>    <property name="密级" value=""/>    <property name="保管期限" value=""/>    <property name="紧急程度" value=""/>    <property name="主题词" value=""/>    <property name="机构或问题" value="传机构代码"/>    <property name="责任者" value=""/>    <property name="拟稿人" value=""/>    <property name="拟稿部门" value=""/>    <property name="页数" value=""/>    <property name="电子文件数" value="3 一条公文对应的附件数量(整数)"/>    <property name="备注" value="哦啊是的减肥呢分时度假可能放空间的是你就可能"/>    <object type="电子文件">      <property name="序号" value="1"/>      <property name="计算机文件名" value="九寨沟地震"/>      <property name="电子文件" value="www.baidu.com"/>    </object>    <object type="电子文件">      <property name="序号" value="1"/>      <property name="计算机文件名" value="九寨沟地震"/>      <property name="电子文件" value="www.baidu.com"/>    </object>    <object type="电子文件">      <property name="序号" value="1"/>      <property name="计算机文件名" value="九寨沟地震"/>      <property name="电子文件" value="www.baidu.com"/>    </object>    <object type="电子文件">      <property name="序号" value="1"/>      <property name="计算机文件名" value="九寨沟地震"/>      <property name="电子文件" value="www.baidu.com"/>    </object>  </object></archive>
原创粉丝点击