/*
    本次实验需要在www.xom.nu上下载XOM类库
 */

import nu.xom.*;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {
    public static void main(String[] args){
        PersonTest.test();
    }
}

class Person {
    private String first;
    private String last;

    public Person(String firstName, String lastName) {
        this.first =firstName;
        this.last=lastName;
    }

    public Person(Element person) {
        first=person.getFirstChildElement("first").getValue();
        last=person.getFirstChildElement("last").getValue();
    }

    public Element getXML() {
        Element person = new Element("person");
        Element firstName = new Element("first");
        firstName.appendChild(first);
        Element lastName = new Element("last");
        lastName.appendChild(last);
        person.appendChild(firstName);
        person.appendChild(lastName);
        return person;
    }

    public String toString() {
        return first+" "+last;
    }

    public static void format(OutputStream os, Document doc) throws IOException {
        Serializer serializer = new Serializer(os, "ISO-8859-1");
        serializer.setIndent(4);
        serializer.setMaxLength(60);
        serializer.write(doc);
        serializer.flush();
    }

}

class People extends ArrayList<Person> {
    public People(String fileName) throws ParsingException, IOException {
        Document doc = new Builder().build(fileName);
        Elements elements = doc.getRootElement().getChildElements();
        for(int i =0;i<elements.size();i++){
            add(new Person(elements.get(i)));
        }
    }
}

class PersonTest{
    public static void test(){
//        testToXML();
        testFromXML();
    }
    public static void testToXML() {
        List<Person> persons = Arrays.asList(
                new Person("A","a"),
                new Person("B","b"),
                new Person("C","c")
        );

        System.out.println(persons);

        Element root = new Element("people");
        for (Person p : persons) {
            root.appendChild(p.getXML());
        }
        Document doc = new Document(root);

        try {
            Person.format(System.out,doc);
            Person.format(new BufferedOutputStream(
                    new FileOutputStream("People.xml")),doc);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void testFromXML() {
        try {
            People p = new People("People.xml");
            System.out.println(p);
        } catch (ParsingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java编程思想:XML的更多相关文章

  1. 注解的基本盘点 -- 《Java编程思想》

    注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在之后的某一个时刻非常方便地使用这些数据. ---<Java编程思想> 其实注解可以理解为一个工具类,只要使用了这个工 ...

  2. MyEclipse导入ant项目——Java编程思想

    北门煎饼东门串儿: <JAVA编程思想(Think in Java)>一书中提供了大量源代码,可是项目是用ant构建的.对于用惯了eclipse,netbeans等IDE的同学们可能有些手 ...

  3. Java编程思想(第4版) 中文清晰PDF完整版

    Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区  作者:Linux [字体:大 中 小]     <Java编程思想>这本书赢得了全 ...

  4. 《Java编程思想》读书笔记(三)

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十一章到第十六章的内容,这一次 ...

  5. JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)

    switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...

  6. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  7. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  8. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  9. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  10. 《java编程思想》读书笔记(一)开篇&第五章(1)

    2017 ---新篇章  今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...

随机推荐

  1. SQLite Expert Professional 打开加密SQLite数据库

    原文 SQLite Expert Professional 打开加密数据库 (已修改) 版本:sqlite expert professional 4.2.0.739 (x86) 目的:用SQLite ...

  2. SQL SERVER中UPDLOCK ,READPAST使用

    原文:SQL SERVER中UPDLOCK ,READPAST使用 SQL SERVER中中获取不重复数据: select top 1 * from orders with(UPDLOCK ,READ ...

  3. DBLINK学习

    1.连接本地scott用户查看拥有的表 [oracle@ORADG ~]$ sqlplus scott/tiger SQL> select * from tab; TNAME           ...

  4. 【备忘】C#语言基础-2

    泛型 CollectionClass<ItemClass> items = new CollectionClass<ItemClass>(); items.Add(new It ...

  5. 一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等

    优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...

  6. WCF研究-中篇

    中篇 5.托管于宿主 6.消息模式 7.WCF行为-实例管理和并发控制 8.安全 5.托管于宿主 托管 宿主Host Ø承载WCF Service运行的环境 自承载方式 系统服务方式 IIS方式 WA ...

  7. vim好用的功能 sublime text2类似的实现系列一

    sublime的跳转 功能 快捷键 备注 往回跳 alt+- 和vim一样方便,可以在页面些跳转,定位到上次编辑的地方 往前跳 alt+shift+- 无 定义或取消标记 ctrl+<F2> ...

  8. Cloudera Impala需求

    Cloudera Impala需求 为了达到预期的效果,Impala依赖于软件.硬件的可用性,以及下面章节描述的配置. 继续阅读: 支持的操作系统 支持的Hadoop发布 Hive Metastore ...

  9. JPA 报错解决方案 com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'test_db' when IDENTITY_INSERT is set to OFF.

    这种错误插入数据时就是hibernate的自增长字段生成规则应该用native 在字段前加入注解 @GeneratedValue(generator="generator") @G ...

  10. kafka笔记2

    Kafka是使用java开发的程序,所以它可以运行在多种操作系统上,安装Kafka之前,需要先安装Java环境,再安装zookeeper broker常规配置 1.broker.id 每个broker ...