<?xml version="1.0" encoding="GBK"?>
<!--这是一个保存学生信息的XML文档-->
<students>
<student id="1">
<name>zhangsan</name>
<sex>man</sex>
<age>20</age>
</student>
<student id="2">
<name>lisi</name>
<sex>lady</sex>
<age>21</age>
</student>
</students>--------------------package com.xml.dom4j;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;
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;public class ParseXml
{
    /**
    * 方法创建一个XML文件,并设置文件节点。
    * @param 无参数
    * @return void 无返回
    * @exception try IOException
    */
    public static void dom4jCreateXml()
    {
        Document doc = DocumentHelper.createDocument();
        doc.addComment("这是一个保存学生信息的XML文档");
        Element root = doc.addElement("students");
        Element stuEle = root.addElement("student");
        stuEle.addAttribute("id", "1");
        Element nameEle = stuEle.addElement("name");
        nameEle.setText("zhangsan");
        Element sexEle = stuEle.addElement("sex");
        sexEle.setText("man");
        Element ageEle = stuEle.addElement("age");
        ageEle.setText("20");
        Writer out;
        try
        {
            out = new FileWriter("src/student.xml");
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");
            XMLWriter writer = new XMLWriter(out, format);
            writer.write(doc);
            writer.close();
            System.out.print("生成XML文件成功");
        }
        catch (IOException e)
        {
            System.out.print("生成XML文件失败5ee4463499dUadhh");
            e.printStackTrace();
        }
    }
    
    /**
    * 方法用于为XML添加一个节点
    * @param 无参数 
    * @return void 无返回类型
    * @exception throws DocumentException, IOException
    */
    public static void addElement() throws DocumentException, IOException
    {
        File file = new File("src/student.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        Element root = doc.getRootElement();
        Element stuEle = root.addElement("student");
        stuEle.addAttribute("id", "2");
        Element nameEle = stuEle.addElement("name");
        nameEle.setText("lisi");
        Element sexEle = stuEle.addElement("sex");
        sexEle.setText("nv");
        Element ageEle = stuEle.addElement("age");
        ageEle.setText("21");
        XMLWriter writer = new XMLWriter(new FileWriter(file));
        writer.write(doc);
        writer.close();
    }
    
    /**
    * 方法用于修改某个节点的属性或值
    * @param 无参数
    * @return void 无返回
    * @exception throws DocumentException, IOException
    * */
    @SuppressWarnings("unchecked")
    public static void modifyElement() throws DocumentException, IOException
    {
        LinkedList l;
        File file = new File("src/student.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        Element root = doc.getRootElement();
        List<Element> student = root.elements("student");
        for (int i = 0; i < student.size(); i++)
        {
            if (student.get(i).attributeValue("id").equals("2"))
            {
                student.get(i).element("name").setText("wangwu");
                XMLWriter writer = new XMLWriter(new FileWriter(file));
                writer.write(doc);
                writer.close();
                break;
            }
        }
    }
    
    /**
    * 方法用于删除文件中的某个节点
    * @param 无参数
    * @return void 无返回
    * @exception throws DocumentException, IOException
    * */
    @SuppressWarnings("unchecked")
    public static void deleteElement() throws DocumentException, IOException
    {
        File file = new File("src/student.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        Element root = doc.getRootElement();
        List<Element> student = root.elements("student");
        for (Element ele : student)
        {
            if (ele.attributeValue("id").equals("2"))
            {
                root.remove(ele);
                XMLWriter writer = new XMLWriter(new FileWriter(file));
                writer.write(doc);
                writer.close();
                break;
            }
        }
    }
    
    /**
    * 方法用于读取整个XML文件,显示各个节点的值
    * @param 无参数
    * @return void 无返回类型
    * @exception throws DocumentException
    * */
    @SuppressWarnings( { "unused", "unchecked" })
    private static void dom4jReadXml() throws DocumentException
    {
        File file = new File("src/student.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        Element root = doc.getRootElement();
        List<Element> list = root.elements("student");
        for (Element ele : list)
        {
            String name = ele.elementText("name");
            String age = ele.elementText("age");
            String sex = ele.elementText("sex");
            System.out.println(name + " " + age + " " + sex);
        }
    }
}

解决方案 »

  1.   

    强大的hibernate就是用的dom4j解析技术
      

  2.   

    XML 解析在 Java 中主要有三种技术 DOM、SAX 和 StAX。这里面 Java 中四种 XML 解析技术的比较
    http://www.developer.com/xml/article.php/3397691/Does-StAX-Belong-in-Your-XML-Toolbox.htm经那里表格比较 StAX 是最为有效的。StAX 是 JSR 173,原本是 Java EE 中的组件,但在 JDK 1.6 中已经将其纳入到 J2SE 中,StAX 的 API 位于 javax.xml.stream 包中,有兴趣的话可以去看看。目前基于 SOAP XML 的 WebServices 框架基本上都是采用 StAX 来解析的。
      

  3.   


    什么叫小菜 你刚学java的时候这是小菜吗 做人要谦虚 每个人开始不都是菜鸟吗
      

  4.   

    jdom,dom4j这些在并发大的时候效率是很不高的
      

  5.   

     首先对LZ的开源精神表示感谢
       目前在国内 dom4j+xpath是解析XML的主要手段
       但dom4j在解析大文件是,耗的内存是想到大的
       向LZ 推荐vtd
       以下链接是介绍
       http://www.jz123.cn/text/106607.html
      

  6.   

    vtd-xml是否能用客户端语言操作,如javascript