xml 将解析的文件里的值赋给对象,将对象存入集合

在dom解析的基础上加了很多if语句,不是最优解法.

public class Dom4jaddList {


    @Test
    public void DompareXml() throws Exception {
        File file = new File("src/com/youv/xml/test/students.xml");     
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();      
        DocumentBuilder builder = dbf.newDocumentBuilder(); 
        DOMReader reader = new DOMReader();
        Document doc = reader.read(builder.parse(file));
        // 获取根节点的元素对象
        Element node = doc.getRootElement();
        List<Student> liststu = new ArrayList<Student>();
        // 创建对象
        Student student = new Student();
        // 在遍历的过程中将元素存入对象中,再存入集合中
        listnode(node,student,liststu);
        // 遍历集合
        iter(liststu);

    }


    @SuppressWarnings("unchecked")
    public void listnode(Element node,Student student,List<Student> liststu) {


        // 获取根元素的名字
        // System.out.println("根元素名字是"+node.getName());
        // 获取元素的属性信息
        List<Attribute> list = node.attributes();
        for (Attribute attribute : list) {
            String id=attribute.getText();
            student.setId(id);
            System.out.println(id);

        }

        // 获取文本
        if (!(node.getTextTrim().equals(""))) {
            // 获取文本数据
            String str = node.getName();
            String data = (String) node.getData();

            if (str.equals("name")) {
                student.setName(data);
            }
            if (str.equals("sex")) {
                student.setSex(data);

            }
            if (str.equals("age")) {
            //xml文件的数据是有顺序的,age是一个student标签的最后一个子标签.所以在这里存入集合
                int age = Integer.parseInt(data);
                student.setAge(age);
                liststu.add(student);

            }

        }



        Iterator<Element> it = node.elementIterator();
        while (it.hasNext()) {
            Element element = it.next();
        //在这里进行判断,因为是递归操作,所以每次迭代都需要将完成一部分的数据重新放入自己的方法
        //中.element,student,liststu,需要判断什么时候需要创建新的student对象,
            if(element.getName().equals("student")){
                student=new Student();
                listnode(element,student,liststu);

            }else{

                listnode(element,student,liststu);
            }
        }

    }

    public void iter(List<Student> liststu) {
        Iterator<Student> it = liststu.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值