肉松饼罗曼史 2017-06-13 09:45 采纳率: 42.9%
浏览 2485
已采纳

java中,怎么顺序读取xml里面的数据?

有一个问题问下大牛们,我想顺序读取xml里面的数据,代码不知道咋写,请教一下,这个问题困扰我好久了。

图片说明

如图,比如这个xml,我想顺序读取出来,怎么做啊?

  • 写回答

3条回答 默认 最新

  • 杂说 博客专家认证 2017-06-13 10:08
    关注

    1.xml运用

    ClassLoader cl = ReadAndWrite.class.getClassLoader();
    URL url = cl.getResource("User.xml");
    String f = url.getPath();
    SAXReader reader = new SAXReader();
    Document doc = null;
    doc = reader.read(f);
    //获得根节点
    Element root = doc.getRootElement();
    @SuppressWarnings("rawtypes")
    //迭代器
    Iterator iter = root.elementIterator();
    while(iter.hasNext()){
    //获取子元素
    Element element = (Element)iter.next();
    String mail1 = element.elementText("mail");
    System.out.println("qwerqwrwer");
    if(mail.equals(mail1)){
    request.getSession().setAttribute("judge","false");
    System.out.println("niahaiao");

                    //response.sendRedirect=把地址发送到浏览器端,让浏览器再请求,这是地址栏变的原因 request.getRequestDispatcher().forward=服务端的控制权转向,等于从一个servletClass跳到另一个servletClass或jsp继续运行,最后才返回所有的结果,所以地址栏不会变 
                    request.getRequestDispatcher("Work1_2.jsp").forward(request,response);
                }
            }
            request.getSession().setAttribute("judge","true");
            request.getRequestDispatcher("Work1_3.jsp").forward(request,response);
            } catch (Exception e) { 
                e.getMessage(); 
        } 
    

    2.创建xml
    Document document = DocumentHelper.createDocument();

            //锭以根节点
            Element users = document.addElement("users");
            //定义子节点
            Element user = users.addElement("user");
            Element na = user.addElement("name");
            Element mgrade = user.addElement("mgrade");
            Element egrade = user.addElement("egrade");
            //给子节点赋值
            na.setText(name);
            mgrade.setText(math);
            egrade.setText(english);
            //设置输出格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
    
            XMLWriter writer = 
                    new XMLWriter(new FileOutputStream(new File("D:/users.xml")),format);
            writer.write(document);
            writer.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    

    3.添加xml节点(文件路径要写绝对路径 不然不行 我也不知道嘛回事)
    String name = request.getParameter("name");
    String math = request.getParameter("math");
    String english = request.getParameter("english");
    try{
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File("D:/java Web 程序/jsj_3_20153697_5/src/Users.xml"));
    //获得根节点
    Element root = doc.getRootElement();
    //定义子节点
    Element user = root.addElement("user");
    Element na = user.addElement("name");
    na.setText(name);
    Element mgrade = user.addElement("mgrade");
    mgrade.setText(math);
    Element egrade = user.addElement("egrade");
    egrade.setText(english);
    //设置输出格式
    OutputFormat format = new OutputFormat(" ", true, "utf-8");
    XMLWriter writer = new XMLWriter(new FileOutputStream("D:/java Web 程序/jsj_3_20153697_5/src/Users.xml"), format);
    writer.write(doc);
    writer.close();
    }catch (Exception e) {
    e.printStackTrace();
    }

    3.修改XML
    request.setCharacterEncoding("UTF-8");
    String name = request.getParameter("name");
    String math = request.getParameter("math");
    String eng = request.getParameter("english");
    try {
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File("D:/java Web 程序/jsj_3_20153697_5/src/Users.xml"));
    // 获得根节点
    Element root = doc.getRootElement();
    // 得到根节点的下的user节点列表
    @SuppressWarnings("rawtypes")
    List user = root.selectNodes("user");
    @SuppressWarnings("rawtypes")
    //迭代器
    Iterator iter = user.iterator();
    while (iter.hasNext()) {
    // 获取该列表种的下一个元素 必须要有next() 不然会死循环
    Element e = (Element) iter.next();//第一次执行此语句为获得第一个列表中的节点
    String name1 = e.elementText("name");
    if (name.equals(name1)) {
    @SuppressWarnings("rawtypes")
    //获取user(子)节点下的所有的子节点的综合
    Iterator iter1 = e.elementIterator();
    int i = 1;
    while (iter1.hasNext()) {
    //获取user下的单个节点 next()必须!!!!!!
    Element element2 = (Element) iter1.next();
    if (i == 2) {
    element2.setText(math);
    }
    if(i == 3){
    element2.setText(eng);
    }
    i++;
    }
    }
    }
    OutputFormat format = new OutputFormat("", true, "utf-8");
    XMLWriter writer = new XMLWriter(new FileOutputStream("D:/java Web 程序/jsj_3_20153697_5/src/Users.xml"),format);
    writer.write(doc);
    writer.close();
    response.sendRedirect("Work2_1.jsp");

            希望能帮到你
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 手机连接电脑热点显示无ip分配
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大