XML操作1

来源:互联网 发布:windows远程桌面命令 编辑:程序博客网 时间:2024/05/22 00:19

package com.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 使用dom4j对xml文件进行读写
 *
 * @author yaotengjiao
 * @date 2011-8-5
 */
public class ReadXMLUseDom4j {
    private static String xmlPath = "G:/123/测试.xml";
   
    /**
     * main测试方法
     *
     * @param args
     * @throws IOException
     * @throws DocumentException
     */
    public static void main ( String[] args ) throws IOException, DocumentException {
        //createXML ();//创建文件
        readAndUpdateXML ();
    }
   
    /**
     * 读取xml文件信息
     * 修改其中的内容
     * @throws DocumentException
     * @throws IOException
     *
     */
    public static void readAndUpdateXML () throws DocumentException, IOException {
        //注意此处没有做任何的判断,详细的判断可以另外添加
        File xmlFile = new File ( xmlPath );
        SAXReader saxReader = new SAXReader ();//创建xml文档的读写器对象
        Document doc = saxReader.read ( xmlFile );//获得Document对象(可能会出现  org.xml.sax.SAXParseException: Invalid byte 2 of 2-byte UTF-8 sequence的错误,问题可以的解决方式:1、可以更改xml文件的编码格式GBK;2、XML文件保存为UTF-8)
        List list = doc.selectNodes ( "//user/Username/@chineseName" );//获得属性的集合,也可以获得单独的一个节点
        Iterator iter = list.iterator ();//遍历循环节点
        while (iter.hasNext ()) {
            Attribute attr = (Attribute) iter.next ();//修改属性的值
            if (attr.getValue ().equals ( "" )) {
                attr.setValue ( "哈哈,找到了但是公司的风格" );
            }
        }
        Element e=doc.getRootElement ();
        List<Element> lis1t=e.elements ();
        for(Element er:lis1t){
            System.out.println (er.getName ()+"  ");
        }
        System.out.println (doc.getRootElement ().getName ());
        //设置节点
        List list1 = doc.selectNodes ( "//user/Username" );
        Iterator iter1 = list1.iterator ();
        while (iter1.hasNext ()) {
            Element ele = (Element) iter1.next ();
            ele.setText ( "1324654698" );
        }
        OutputFormat formate=OutputFormat.createPrettyPrint ();
        formate.setEncoding ( "UTF-8" );
        //修改文件
        //XMLWriter writer = new XMLWriter ( new FileWriter ( xmlFile ) );
        XMLWriter writer = new XMLWriter ( new FileWriter ( xmlPath ),formate );
        writer.write ( doc );
        writer.close ();
    }
   
    /**
     * 向XML文件中添加信息
     * @throws IOException
     * 这个解析器可以从 http://dom4j.org 获取。
     * 通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,
     * 该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。
     * 如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,
     * 向 classpath 中增加 dom4j-1.4/dom4j.jar 。
     * dom4j.jar 包括 dom4j 类和 XPath 引擎,
     * 但是不含 SAX 与 DOM 接口。
     *
     */
    public static void createXML () throws IOException {
        //利用DocumentHelper来创建Document对象
        Document doc = DocumentHelper.createDocument ();
        //添加文档说明
        //doc.addDocType ( "132", null, " hahha" );
        //创建节点(这是添加根节点)
        Element element = doc.addElement ( "user" );
        //为节点添加注释
        element.addComment ( "只是一个节点" );
        //使用addprocessingInstruction()方法来增加一个处理命令
        //element.addProcessingInstruction ( "target", "text" );
        //添加节点元素
        Element childrenElement = element.addElement ( "Username" );
        childrenElement.addAttribute ( "chineseName", "卡哇伊" );
        childrenElement.setText ( "猜猜我是谁" );//设置节点的文本值
        //使用流来创建xml文件
        XMLWriter writer = new XMLWriter ( new FileWriter ( new File ( xmlPath ) ) );
        writer.write ( doc );
        writer.close ();
    }
}