当前位置: 首页 > 工具软件 > XOM > 使用案例 >

XML解析—开源XOM类库

商麒
2023-12-01

在开发中最常见的数据格式一般两种:Json和XML。今天介绍的是一个XML的解析库,因为它看起来最简单,同时还强调了XML的正确性。如果不是很了解什么是XML,还请自己查一下资料,我主要就XOM库关于怎么存储XML和解析XML做一下说明。


编写一个Person对象

它包括姓名,年龄,地址,你想要将他们序列化到XML 这个Person类有一个getXML()方法,它使用XOM来产生被转换XML的Element对象的Person数据。

public class Person {
    private String name;
    private String age;
    private String address;
  //一般的构造函数 
    public Person(String name, String age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
    // XML解析数据 参数传递Element对象
     public Person(Element person){
        name = person.getFirstChildElement("name").getValue();
        age = person.getFirstChildElement("age").getValue();
        address = person.getFirstChildElement("address").getValue();

    }
 //方法生成一个Element节点
 public Element getXML(){
        // 生成一个person节点 它下面还有三个子节点 name age address
        Element Node = new Element("person");
        // 生成一个name节点 并使用appendChild()填充数据
        Element Node_name = new Element("name");
        Node_name.appendChild(name);
        Element Node_age = new Element("age");
        Node_age.appendChild(age);
        Element Node_address = new Element("address");
        Node_address.appendChild(address);
        // 将三个子节点 name age address添加到父节点Person中
        Node.appendChild(Node_name);
        Node.appendChild(Node_age);
        Node.appendChild(Node_address);
        return Node;
    }

序列化生成XML

编写一个函数用来生成序列化数据,并将数据转换为数据流写入。参数OutputStream os 表示输出流, Document doc则是生成的完整的XML格式。

 public static void format(OutputStream os, Document doc) throws Exception{
         // Serializer参数 第一个为输出流  第二个为编码格式
        Serializer serializer = new Serializer(os,"UTF-8");
        serializer.setIndent(4);
        serializer.setMaxLength(60);
        serializer.write(doc);
        serializer.flush();
    }

反序列化获取Person对象

获取XML文件的File对象,使用XOM的Builder.build()方法打开并读取一个文件,使用getChildElements() 产生一个Element列表(不是一个标准的List 只是拥有size和get方法的对象) 注意,这里需要知道XML文件的确切结构。

            List<Person> people = new ArrayList<Person>();
            File file = new File(getExternalFilesDir(null), "person.xml");
            Document doc = new Builder().build(file);
            Elements elements = doc.getRootElement().getChildElements();
            for(int i = 0; i < elements.size(); i++){
                people.add(new Person(elements.get(i)));
            }
            //直接打印List容器中的数据即可

编写测试样例

        //1.序列化生成XML
        List<Person> people = new ArrayList<Person>();
        people.add(new Person("zhengyan","24","wuhan"));
        people.add(new Person("wukong","26","beijing"));
        people.add(new Person("livvy","21","shenzheng"));
        people.add(new Person("susan","24","hk"));
        // 生成XML的根节点people 调用对象P的方法getXML() 组装成完整的XML数据
        Element root = new Element("people");
        for(Person p : people){
            root.appendChild(p.getXML());
        }
        // 生成要存储XML文件的File对象
        File file = new File(getExternalFilesDir(null), "person.xml");
        FileOutputStream fos = new FileOutputStream(file);
        //将Element对象的root传入Document的构造器中
        Document doc = new Document(root);
        // 序列化生成XML
        Person.format(fos, doc);


 类似资料: