XML解析—开源XOM类库
发布时间:2020-12-16 05:59:37 所属栏目:百科 来源:网络整理
导读:在开发中最常见的数据格式一般两种:Json和XML。今天介绍的是一个XML的解析库,因为它看起来最简单,同时还强调了XML的正确性。如果不是很了解什么是XML,还请自己查一下资料,我主要就XOM库关于怎么存储XML和解析XML做一下说明。 编写一个Person对象 它包括
在开发中最常见的数据格式一般两种: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","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);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Rails 3测试框架混乱
- JSON对象方法的总结
- 在Objective-C中Try-Catch等效
- 正则表达式匹配url的一种思路
- Ext.tree.TreePanel,accordion布局基于SSH+JSON的系统级应用
- cocos2d-x 游戏开发之有限状态机(FSM) (一)
- c – 未知类型名称’class’;你的意思是’上课’吗? Aurio
- ios – 运行工具链时出现“xcrun:error:SDK”iphonesimul
- ruby-on-rails-3 – 无法让“rails console”在ubuntu 11.1
- Ajax局部界面更新导致JS事件重复触发的问题