XML解析与创建之——JDOM

前面两篇关于DOM和SAX解析都是官方提供的xml解析和创建方式。
DOM——基于树结构
SAX——基于事件
JDOM/DOM4J——基于底层API,即DOM和SAX。
下面两种解析和生成方式是基于底层API(DOM和SAX)的非官方的生成方式。这篇我们先测试JDOM。(其中student和xml文件,参考dom篇)
JDOMHelper.java

public class JDOMHelper {

    public List<Student> parseXML() {
        List<Student> students = new ArrayList<Student>();
        Student student = null;
        // 导入jdom.jar包
        // 1.创建一个SAXBuilder对象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 创建一个输入流的引用
        InputStream in;
        try {
            // 2.创建一个输入流,将xml文件加载到输入流中
            in = new FileInputStream("data/student.xml");
            // 3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
            Document document = saxBuilder.build(in);
            // 4.通过document对象获得xml文件的根节点
            Element rootElement = document.getRootElement();
            // 5.获取根节点下的子节点的List集合
            List<Element> studs = rootElement.getChildren();
            // 对节点集合进行遍历
            for(Element stud : studs) {
                // 每一个student节点创建一个student对象
                student = new Student();
                // 获得student节点的属性
                List<Attribute> attrs = stud.getAttributes();
                // 遍历属性集合
                for(Attribute attr : attrs) {
                    // studNo属性
                    if(attr.getName().equals("studNo")) {
                        student.setStudNo(Integer.parseInt(attr.getValue()));
                    // name属性
                    } else if(attr.getName().equals("name")) {
                        student.setName(attr.getValue());
                    }
                }
                List<Element> childs = stud.getChildren();
                for(Element child : childs) {
                    if(child.getName().equals("sex")) {
                        student.setSex(child.getValue());
                    } else if(child.getName().equals("age")) {
                        student.setAge(Integer.parseInt(child.getValue()));
                    } else if(child.getName().equals("home")) {
                        student.setHome(child.getValue());
                    } else if(child.getName().equals("single")) {
                        student.setSingle(child.getValue().equals("单身"));
                    }
                }
                students.add(student);
            }


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return students;
    }

    public void creatXML(List<Student> students) {
        // 生成一个根节点
        Element studs = new Element("students");
        // 利用根节点生成一个document对象
        Document document = new Document(studs);
        // 遍历student集合
        for(Student student : students) {
            // 对集合中的每一个student对象创建标签
            Element stud = new Element("student");
            // 给student标签添加属性
            stud.setAttribute("studNo", String.valueOf(student.getStudNo()));
            stud.setAttribute("name", student.getName());
            // 子标签age
            Element age = new Element("age");
            age.addContent(String.valueOf(student.getAge()));
            stud.addContent(age);
            // 子标签sex
            Element sex = new Element("sex");
            sex.addContent(student.getSex());
            stud.addContent(sex);
            // 子标签home
            if(student.getHome() != null) {
                Element home = new Element("home");
                home.addContent(student.getHome());
                stud.addContent(home);
            }
            // 子标签single
            if(student.isSingle()) {
                Element single = new Element("single");
                single.addContent("单身");
                stud.addContent(single);
            }
            studs.addContent(stud);
        }
        // 获得xml格式设置对象
        Format format = Format.getCompactFormat();
        // 设置编码
        format.setEncoding("UTF-8");
        // 设置换行
        format.setIndent("");
        // 用格式构造XMLOutputter对象
        XMLOutputter outPutter = new XMLOutputter(format);
        try {
            // 将dom树写进xml文件
            outPutter.output(document, new FileOutputStream(new File("data/student1.xml")));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

对方法进行测试的代码如下:

public class JDOMHelperTest {

    public static void main(String[] args) {
        JDOMHelper jdom = new JDOMHelper();
        List<Student> students = jdom.parseXML();
        jdom.creatXML(students);
        for(Student student : students) {
            System.out.println(student);
        }
    }
}

以上是我学习时的实验,有什么不对的地方,敬请指正。本人将不胜感激!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值