疯狂源代码吧 关注:12,745贴子:34,937
  • 6回复贴,共1

【安卓学习】【xml之java拿去XMl文档节点修改添加练习】

只看楼主收藏回复

由于,度娘一个帖子楼主好像不能回复太多,要不要被删!为了更好的记录,分阶段会发帖,会直播到7月初,感谢大家支持
如题通过界面完成对xml的添加删除查找
效果如图

【exam.xml】文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam>
<student examid="222" idcard="111">
<name>张三</name>
<location>沈阳</location>
<grade>89</grade>
</student>
<student examid="444" idcard="333">
<name>李四</name>
<location>大连</location>
<grade>97</grade>
</student>
</exam>
【工具类JaxpUtils 】
package com.jack.util;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
//工具类
public class JaxpUtils {
//用啦获取dom树
public static Document getDocument() {
//创建dom解析器
try{
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = db.parse("src/exam.xml");
return document;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
//保存树到硬盘
public static void write2xml(Document document){
//创建一个transform对象
try{
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/exam.xml"));
}catch(Exception e){
e.printStackTrace();
}
}
}


1楼2016-03-14 22:40回复
    【逻辑处理类StudentDao.java】
    package com.heima.dao;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import com.heima.bean.Student;
    import com.heima.util.JaxpUtils;
    //业务逻辑处理类
    public class StudentDao {
    /**
    * 将学生添加到XML文件中
    * @param student 要添加的学生
    * @return 成功返回TRUE,否则FALSE
    */
    public boolean add(Student student){
    //加载dom树
    Document document = JaxpUtils.getDocument() ;
    //拿到根节点
    Element root = document.getDocumentElement() ;
    //创建一个student节点,及子节点
    Element stu = document.createElement("student") ;
    Element nameEl = document.createElement("name") ;
    Element locationEl = document.createElement("location") ;
    Element gradeEl = document.createElement("grade") ;
    //为student子节点和属性赋值
    stu.setAttribute("examid", student.getExamid()) ;
    stu.setAttribute("idcard", student.getIdcard()) ;
    nameEl.setTextContent(student.getName()) ;
    locationEl.setTextContent(student.getLocation()) ;
    gradeEl.setTextContent(student.getGrade() + "") ;
    //组合各个节点
    stu.appendChild(nameEl) ;
    stu.appendChild(locationEl) ;
    stu.appendChild(gradeEl) ;
    //将student节点添加到根节点上
    root.appendChild(stu) ;
    //将内存中的dom树保存到硬盘上
    JaxpUtils.write2xml(document) ;
    return true ;
    }
    /**
    * 根据学生的姓名删除学生
    * @param name 要删除学生的姓名
    * @return 成功返回TRUE,否则返回FALSE
    */
    public boolean delete(String name){
    //加载dom树
    Document document = JaxpUtils.getDocument() ;
    //获取所有的name节点
    NodeList nl = document.getElementsByTagName("name") ;
    //循环判断
    for (int i = 0; i < nl.getLength(); i++) {
    Node n = nl.item(i) ;
    if(n.getTextContent().equals(name)){
    //说明找到了要删除的学生
    //爷爷干掉父亲
    n.getParentNode().getParentNode().removeChild(n.getParentNode()) ;
    //将结果保存到硬盘上
    JaxpUtils.write2xml(document) ;
    return true ;
    }
    }
    return false ;
    }
    /**
    * 根据准考证号查询学生
    * @param examid 要查询学生的准考证号
    * @return 成功返回此学生,否则返回null
    */
    public Student findByExamId(String examid){
    //加载dom树
    Document document = JaxpUtils.getDocument() ;
    //拿取所有的学生节点
    NodeList nl = document.getElementsByTagName("student") ;
    //循环拿取每个student节点的examid属性的值判断
    for (int i = 0; i < nl.getLength(); i++) {
    Element stuNode = (Element)nl.item(i) ;
    if(stuNode.getAttribute("examid").equals(examid)){
    //找到了此学生
    //开始封装数据
    Student s = new Student() ;
    s.setExamid(examid) ;
    s.setIdcard(stuNode.getAttribute("idcard")) ;
    s.setName(stuNode.getElementsByTagName("name").item(0).getTextContent()) ;
    s.setLocation(stuNode.getElementsByTagName("location").item(0).getTextContent()) ;
    s.setGrade(Float.parseFloat(stuNode.getElementsByTagName("grade").item(0).getTextContent())) ;
    return s ;
    }
    }
    return null ;
    }
    }


    2楼2016-03-14 22:44
    回复
      【学生类用来存储信息】
      package com.jack.bean;
      public class Student {
      private String idcard;
      public String getIdcard() {
      return idcard;
      }
      public void setIdcard(String idcard) {
      this.idcard = idcard;
      }
      @Override
      public String toString() {
      return "Student [idcard=" + idcard + ", examid=" + examid + ", name="
      + name + ", location=" + location + ", grade=" + grade + "]";
      }
      public String getExamid() {
      return examid;
      }
      public void setExamid(String examid) {
      this.examid = examid;
      }
      public String getName() {
      return name;
      }
      public void setName(String name) {
      this.name = name;
      }
      public String getLocation() {
      return location;
      }
      public void setLocation(String location) {
      this.location = location;
      }
      public float getGrade() {
      return grade;
      }
      public void setGrade(float grade) {
      this.grade = grade;
      }
      private String examid;
      private String name;
      private String location;
      private float grade;
      }


      3楼2016-03-14 22:45
      回复
        【dom4j改造上面exam示列】
        修改的类有StudentDom 类和JaxpUtils类剩下两个类,不许要改动,这是代码哦
        【 JaxpUtils类】
        package com.jack.util;
        import java.io.FileNotFoundException;
        import java.io.FileOutputStream;
        import java.io.UnsupportedEncodingException;
        import org.dom4j.Document;
        import org.dom4j.io.OutputFormat;
        import org.dom4j.io.SAXReader;
        import org.dom4j.io.XMLWriter;
        //工具类
        public class JaxpUtils {
        //用来获取dom树
        public static Document getDocument() {
        //创建dom4j解析器
        try{
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/exam.xml");
        return document;
        }catch(Exception e){
        e.printStackTrace();
        }
        return null;
        }
        //保存树到硬盘
        public static void write2xml(Document document){
        try {
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/exam.xml"),OutputFormat.createPrettyPrint());
        writer.write(document);
        writer.close();//保存玩关闭流
        } catch (Exception e) {
        e.printStackTrace();
        }
        }
        }
        【StudentDom 类】
        package com.jack.dao;
        import java.util.List;
        import org.dom4j.Document;
        import org.dom4j.Element;
        import org.dom4j.Node;
        import org.w3c.dom.NodeList;
        import com.jack.bean.Student;
        import com.jack.util.JaxpUtils;
        /*
        * 将学生添加到xml文件中
        * student要添加的学生
        * 成功返回true否则返回false
        */
        //业务逻辑类
        public class StudentDom {
        public boolean add(Student student){
        //首先加载dom树
        Document document = JaxpUtils.getDocument();
        //拿到根节点
        Element root = document.getRootElement();
        //创建一个students节点
        Element stu = root.addElement("student").addAttribute("idcard", student.getIdcard())
        .addAttribute("examid", student.getExamid());
        //添加子节点
        stu.addElement("name").setText(student.getName());
        stu.addElement("location").setText(student.getLocation());
        stu.addElement("grade").setText(student.getGrade()+"");
        //将内存保存到硬盘
        JaxpUtils.write2xml(document);
        return true;
        }
        /*
        * 根据学生姓名删除学生
        */
        public boolean delete(String name){
        //加载dom树
        Document document = JaxpUtils.getDocument();
        //获取根节点
        Element root = document.getRootElement();
        //拿到students节点
        List<Element> stulist = root.elements("student");
        //循环判断
        for(int i = 0;i<stulist.size() ;i++){
        Element stu = stulist.get(i);
        if(stu.elementText("name").equals(name))
        {
        //找到了父亲干掉儿子
        stu.getParent().remove(stu);
        //保存结果
        JaxpUtils.write2xml(document);
        return true;
        }
        }
        return false;
        }
        /*
        *根据证考证号查询学生
        */
        public Student findByExamId(String examid){
        //加载dom树
        Document document = JaxpUtils.getDocument();
        //拿去根节点
        Element root = document.getRootElement();
        //拿去所有的学生节点
        List<Element> stulist = root.elements("student");
        //循环拿去每个stu接待你的examid熟悉进行判断
        for(int i = 0;i<stulist.size();i++){
        //找到这个学生了,开始封装了
        Element stuNode = stulist.get(i);
        if(stuNode.attributeValue("examid").equals(examid)){
        Student s = new Student();
        s.setExamid(examid);
        s.setIdcard(stuNode.attributeValue("idcard"));
        s.setName(stuNode.elementText("name"));
        s.setLocation(stuNode.elementText("location"));
        s.setGrade(Float.parseFloat(stuNode.elementText("grade")));
        //保存
        JaxpUtils.write2xml(document);
        return s;
        }
        }
        return null;
        }
        }


        5楼2016-03-15 10:39
        回复
          不错


          来自Android客户端6楼2016-03-16 13:59
          回复
            支持支持支持支持支持支持支持支持支持支持支持


            来自Android客户端7楼2016-03-17 08:00
            回复
              支持支持支持支持支持支持支持支持支持支持支持


              来自Android客户端8楼2016-03-17 08:00
              回复