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

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

            希望能帮到你
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • warmcore 2017-06-13 10:17
     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都可以。

    评论
    解决 无用
    打赏 举报
  • warmcore 2017-06-13 11:09

    这是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(">");
        }
    
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题