zoukankan      html  css  js  c++  java
  • 使用Pull解析器生成XML文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

    使用Pull解析器生成一个与itcast.xml文件内容相同的myitcast.xml文件,代码在本页下方备注

    使用代码如下(生成XML文件):
    File xmlFile = new File("myitcast.xml");
    FileOutputStream outStream = new FileOutputStream(xmlFile);
    OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
    BufferedWriter writer = new BufferedWriter(outStreamWriter);
    writeXML(persons, writer);
    writer.flush();
    writer.close();
    如果只想得到生成的xml字符串内容,可以使用StringWriter:
    StringWriter writer = new StringWriter();
    writeXML(persons, writer);
    String content = writer.toString();

    Pull解析器生成的xml文件如下

    文件名称:itcast.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
     <person id="23">
      <name>liming</name>
      <age>30</age>
     </person>
     <person id="20">
      <name>lixiangmei</name>
      <age>25</age>
     </person>
    </persons>

    具体的方法是:

    在包下新建一个person类,主要用于存放上面解析出来的xml内容,javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后我会提供获取属性和设置属性的get/set方法

    具体代码如下:

    View Code
     1 package cn.itcast.domain;
    2
    3 public class Person {
    4 private Integer id;
    5 private String name;
    6 private Short age;
    7
    8 public Person(){}
    9
    10 public Person(Integer id, String name, Short age) {
    11 this.id = id;
    12 this.name = name;
    13 this.age = age;
    14 }
    15
    16 public Integer getId() {
    17 return id;
    18 }
    19 public void setId(Integer id) {
    20 this.id = id;
    21 }
    22 public String getName() {
    23 return name;
    24 }
    25 public void setName(String name) {
    26 this.name = name;
    27 }
    28 public Short getAge() {
    29 return age;
    30 }
    31 public void setAge(Short age) {
    32 this.age = age;
    33 }
    34 @Override
    35 public String toString() {
    36 return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
    37 }
    38
    39 }

    第二步:新建一个package cn.itcast.service包,在包下新建一个SAXPersonService类,这个就是MVC里的M,业务类,主要代码如下

    View Code
     1 public class PULLPersonService {
    2
    3 public static void save(List<Person> persons, Writer writer) throws Throwable{
    4 XmlSerializer serializer = Xml.newSerializer();//得到一个序列化对象
    5 serializer.setOutput(writer);//指定序列化对象文件输出方向,写入器
    6 serializer.startDocument("UTF-8", true);//生成开始文档
    7 //开始元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    8 serializer.startTag(null, "persons");
    9 for(Person person : persons){
    10 serializer.startTag(null, "person");//开始元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    11 serializer.attribute(null, "id", person.getId().toString());//得到person节点内的属性
    12
    13 serializer.startTag(null, "name");//开始元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    14 serializer.text(person.getName());//得到name节点里的内容
    15 serializer.endTag(null, "name");//结束元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    16
    17 serializer.startTag(null, "age");//开始元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    18 serializer.text(person.getAge().toString());//得到age节点里的内容
    19 serializer.endTag(null, "age");//结束元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    20
    21 serializer.endTag(null, "person");//结束元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    22 }
    23 //结束元素节点,第一个参数是命名空间名称,第二个参数为标签名称
    24 serializer.endTag(null, "persons");
    25 serializer.endDocument();//生成结束文档
    26 writer.flush();
    27 writer.close();
    28 }
    29 }

    第三步:在主包下新建一个PersonServiceTest类,这个类相当与mvc中的c(控制层),主要是对PULLPersonService这个类的save()方法进行单元测试,具体代码

    View Code
     
    这个app潮流公众帐号主要是推荐给手机用户最近最潮的软件,让大家随时跟上时尚。我们会提供给你们最好的服务,喜欢我们就帮我们推荐吧!
     1 public class PersonServiceTest extends AndroidTestCase {
    2 private static final String TAG = "PersonServiceTest";
    3 public void testSave() throws Throwable{
    4 //File file = new File(this.getContext().getFilesDir(), "person.xml");//存放在手机的当前目录下
    5 //FileOutputStream outStream = new FileOutputStream(file);
    6 List<Person> persons = new ArrayList<Person>();
    7 persons.add(new Person(34, "lili", (short)12));
    8 persons.add(new Person(56, "老毕", (short)32));
    9 persons.add(new Person(39, "老张", (short)40));
    10 //存放在手机的当前目录下,模式为私有的
    11 FileOutputStream outStream = this.getContext().openFileOutput("person.xml", Context.MODE_PRIVATE);
    12 OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8");
    13 BufferedWriter bWriter = new BufferedWriter(writer);
    14 PULLPersonService.save(persons, bWriter);
    15
    16 // StringWriter writer = new StringWriter();//送往内存
    17 // PULLPersonService.save(persons, writer);
    18 // Log.i(TAG, writer.toString());
    19 }
    20 }
  • 相关阅读:
    性能测试总结(一)测试流程
    WSDL入门
    Python中的while循环和for循环
    python中的变量
    吴恩达《机器学习》章节2单变量线性回归
    吴恩达《机器学习》章节1绪论:初识机器学习
    新式类多继承的查找顺序
    python2x和python3x的一些区别
    类方法和静态方法
    @property的使用
  • 原文地址:https://www.cnblogs.com/shaoyangjiang/p/2390023.html
Copyright © 2011-2022 走看看