用dom4j吧
我有这样的例子

解决方案 »

  1.   

    dom太笨拙了,用dom4j吧,开源框架都用他做xml解析写XML************
    public WriterXml(Document doc) {
    // TODO Auto-generated constructor stub
    XMLWriter writer;
    try {
    String filename = "g:\\WriterXml.xml";
    OutputFormat format = OutputFormat.createPrettyPrint(); FileOutputStream fos = new FileOutputStream(new File(filename));
    writer = new XMLWriter(fos, format);
    writer.write(doc);
    writer.close(); } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    读XML*****************
    private static void getXml(String filename){
    SAXReader sax = new SAXReader();
    Document doc = null;
    try {
    sax.setEncoding("utf-8");
    doc = sax.read(new File(filename));
    Element root = doc.getRootElement();
    List list = root.elements();
    for(Iterator i = root.elementIterator(); i.hasNext();){
    Element e = (Element) i.next();
    //    System.out.println(e.getName());
    //    System.out.println(e.getPath());
    //    System.out.println(e.getText());
       System.out.println(e.getStringValue());
    for(Iterator j = e.attributeIterator();j.hasNext();){
     Attribute attribute = (Attribute) j.next();
    // System.out.println(attribute.getStringValue());
    }
    } } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  2.   

    像使用开源工具这种问题不建议你上论文咨询详细答案对以后长远发展不好,
    http://www.dom4j.org/guide.html
    给你个地址,去官方看例子,其实英文都很简单的,慢慢,时间久了,不管什么开源的东西,入门都没问题.也是作为一个开发人员必备的技能,如果相信我的话你可以去试试.我的不少朋友试过后感觉都不错,我也是.
      

  3.   

    import java.io.File;
    import java.io.FileWriter;
    import java.util.Iterator;
    import java.util.List;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;public class Dom4jDemo {
        
        public boolean createXML(String fileName){
            boolean isOk = false;
            //建立document对象
            Document doc = DocumentHelper.createDocument();
            //建立XML文档的根books
            Element students = doc.addElement("students");
            students.addComment("This is a test for dom4j");//加入一行注释
            /**加入第一个student节点*/
            Element student = students.addElement("student");//加入第一个student节点
            student.addAttribute("value", "god");//加入value属性和值
            Element name = student.addElement("name");//加入name节点
            name.setText("finina");//为name设置值
            Element age=student.addElement("age");//加入age节点
            age.setText("25");//为age设置值
            Element sex=student.addElement("sex");//加入sex节点
            sex.setText("male");//为sex设置值
            /**加入第二个student节点*/
            student = students.addElement("student");
            student.addAttribute("value", "cat");
            name = student.addElement("name");
            name.setText("fly");
            age=student.addElement("age");
            age.setText("17");
            sex=student.addElement("sex");
            sex.setText("female");
            /**加入team节点*/
            Element team=students.addElement("team");
            team.addText("05093A");
            /**
             *将doc中的内容写入xml文件中
             **/
            try{
                OutputFormat format = OutputFormat.createPrettyPrint();//设置格式
                format.setEncoding("GBK");//必要,否则无法解析中文
                //输出为文件
                XMLWriter writer = new XMLWriter(new FileWriter(fileName),format);
                writer.write(doc);
                writer.flush();
                //
                isOk = true;
            }catch(Exception e){
                e.printStackTrace();
            }
            return isOk;
        }    public boolean modifigXML(String oldFileName,String newFileName){
            boolean isOk = false;
            try{
                SAXReader reader = new SAXReader();//创建SAX阅读器
                Document doc = reader.read(new File(oldFileName));//将所有文件内容读取生存Document对象
                /**修改内容之一: 如果student节点中value属性的内容为god,则修改成king
                 *因为做人不能太嚣张
                 */
                List list = doc.selectNodes("/students/student/@value");//搜索出所有位于students节点下的student节点中的value属性位置放入集合中
                Iterator iter = list.iterator();//加载迭代器
                //迭代集合
                while(iter.hasNext()){
                    Attribute attr = (Attribute)iter.next();
                    if(attr.getValue().equals("god"))//比对值是否相等
                        attr.setValue("king");//设置值
                }            list = doc.selectNodes("/students/team");//搜索出所有位于students节点下team节点位置放入集合中
                iter = list.iterator();//加载迭代器
                //迭代集合
                if(iter.hasNext()){
                    Element team = (Element)iter.next();
                    team.setText("05084A");//设置值
                    Element teacher = team.addElement("teacher");//添加节点
                    teacher.setText("godfather");//为新的节点设置值
                    teacher.addAttribute("skill", "programme");//为新的节点添加属性
                }
                /**修改内容之三: 若age内容为17,则删除该节点
                 *未成年人需要被保护...
                 */
                list = doc.selectNodes("/students/student");//搜索出所有位于students节点下的student节点位置放入集合中
                iter = list.iterator();//加载迭代器
                //迭代集合
                while(iter.hasNext()){
                    Element elem = (Element)iter.next();
                    Iterator iterElem = elem.elementIterator("age");//将该节点下所有的age节点生成一个迭代器
                    //迭代集合
                    if(iterElem.hasNext()){
                        Element remTitle = (Element)iterElem.next();
                        if(remTitle.getText().equals("17"))//对比值
                            elem.remove(remTitle);//移除该节点
                    }
                }
                //将doc中的内容写入文件中
                OutputFormat format = OutputFormat.createPrettyPrint();//设置格式
                format.setEncoding("GBK");//必要,否则无法解析中文
                 //输出为文件,以上操作只是在内存中修改,需要保存为文件来确认修改
                XMLWriter writer = new XMLWriter(new FileWriter(newFileName),format);
                writer.write(doc);
                writer.flush();
                isOk = true;
            }catch(Exception e){
                e.printStackTrace();
            }
            return isOk;
        }
        /**
         *the method readXML
         */
        public void readXML(String fileName){
            try{
                File file = new File(fileName);//创建文件对象
                SAXReader reader = new SAXReader();//创建SAX阅读器
                Document doc = reader.read(file);//读取内容生成Document对象
                Element root = doc.getRootElement();//取得根节点
                search(root);//开始遍历
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        
        //递归遍历
        private void search(Element root) {
            Iterator it_element = root.elementIterator();//将根节点下包含的元素组织成一个迭代器
            //迭代
            while( it_element.hasNext()) {
                Element element = (Element)it_element.next();
                if(!element.getText().equals(""))
                {
                    System.out.println(element.getName()+"节点的值是"+element.getText());
                }
                else
                {
                    System.out.println(element.getName()+"节点");
                }
                Iterator it_attr = element.attributeIterator();
                while( it_attr.hasNext()) {
                    Attribute attr = (Attribute)it_attr.next();
                    if(attr!=null)
                    {
                        System.out.println(element.getName()+"节点的属性"+attr.getName()+ "的值是" + attr.getValue());
                    }
                }
                search(element);//递归调用
            }
        }
        /**
         *the method main
         */
        public static void main(String[] args){
            long start = System.currentTimeMillis();//开始计时
            Dom4jDemo dom4jDemo = new Dom4jDemo();
            String fileName = "dom4jDemo.xml";
            String newFileName = "new_dom4jDemo.xml";
            System.out.println(fileName+"正在创建中...");
            boolean isOk_create = dom4jDemo.createXML(fileName);
            if(isOk_create) System.out.println(fileName+"创建成功!");
            else System.out.println("创建失败!请检查后重新再试!");
            
            System.out.println("正在更新中...");
            boolean isOk_modi = dom4jDemo.modifigXML(fileName, newFileName);
            if(isOk_modi) System.out.println("恭喜,更新完成!");
            //
            System.out.println("正在读取文件 "+fileName+" ...");
            System.out.println("------------------------------------------------");
            dom4jDemo.readXML(fileName);
            System.out.println("------------------------------------------------");
            System.out.println(fileName+"读取成功!");
            System.out.println("正在读取文件 "+newFileName+" ...");
            System.out.println("------------------------------------------------");
            dom4jDemo.readXML(newFileName);
            System.out.println("------------------------------------------------");
            System.out.println(fileName+"读取成功!");
            System.out.println("一共耗时: "+(System.currentTimeMillis()-start)+"毫秒!");
        }
    }
      

  4.   

    解释小的XML文件,用JDOM吧,
    大的XML文件推荐用DOM4J