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

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

图片说明

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

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");

        希望能帮到你
 Scanner sc=new Scanner(new File("E:"+File.separator+"map.xml"));
        while(sc.hasNextLine()){
            String line=sc.nextLine();
            Pattern pattern=Pattern.compile("value\\=\"([\\d])\"");
            Matcher m=pattern.matcher(line);
            if(m.find()){
                System.out.println(m.group(1));
            }
        }

结果就是 1 2 3;
我觉得这是最简单的一种办法,当然,还有sax或dom解析xml都可以。

这是sax解析的。TestSAXParser这个类是测试用的,下面那个SAXParserOfXML是解析器

public class TestSAXParser{
    public static void main(String[] args){
        SAXParserFactory fact=SAXParserFactory.newInstance();
        try {
            SAXParser parser=fact.newSAXParser();
            parser.parse("E:"+File.separator+"map.xml", new SAXParserOfXML() );
        } catch (ParserConfigurationException | SAXException | IOException e) {
            e.printStackTrace();
        }
    }
}
//下面这个类是解析器,里面的方法都是覆写父类的,有SAXParser的对象调用。
class SAXParserOfXML extends DefaultHandler{
    public void startDocument(){
        System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    }
    public void endDocument(){
        System.out.println("\n");
    }
    public void startElement(String uri,String localName,String name,Attributes attributes){
        System.out.print("<");
        System.out.print(name);
        if(attributes!=null){
            for(int x=0;x<attributes.getLength();x++){
                System.out.print(""+attributes.getQName(x)+"=\""+attributes.getValue(x)+"\"");
            }
        }
        System.out.print(">");
    }
    public void characters(char[] ch,int start,int length){
        System.out.print(new String(ch,start,length));
    }
    public void endElement(String uri,String localName,String name){
        System.out.print("</");
        System.out.print(name);
        System.out.print(">");
    }

}