求修改android里XML内容的方法,呃,不用DOM
比如说有这么一个persons.XML
<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person id="01">
     <name>will</name>
     <age>21</age>
  </person>
  <person id="02">
     <name>will2</name>
     <age>22</age>
  </person>
</persons>我是这样保存创建的
public void savePersons(List<Person> person_list,String path) throws Exception{
XmlSerializer seria = Xml.newSerializer();
BufferedWriter out = getWriter(path);
//seria.setOutput(out, "UTF-8"); //设置输出方式,这里使用OutputStream,编码使用UTF-8
//FileOutputStream fileout  = new FileOutputStream(new File(path));
seria.setOutput(out);  //设置输出方式,这里使用写入器
seria.startDocument("UTF-8", true); //开始生成xml的文件头
 seria.startTag(null, "persons");
List<Person> persons = person_list;
Iterator<Person> iperson = person_list.iterator();
 while(iperson.hasNext()){
 Person p=(com.testxml.Person) iperson.next();
 
 seria.startTag(null, "person");
 seria.attribute(null, "ID", p.getID().toString());  //添加属性,名称为id
 seria.startTag(null, "name");
 seria.text(p.getName().toString());  //添加文本元素
 seria.endTag(null, "name");
 seria.startTag(null, "age");
 seria.text(String.valueOf(p.getAge()));//这句话应该可以用来
 seria.endTag(null, "age");
 seria.startTag(null, "sex");
 seria.text(p.getSex().toString());
 seria.endTag(null, "sex");
 seria.endTag(null, "person");
 }
 seria.endTag(null, "persons"); //标签都是成对的
 seria.endDocument();
 out.flush();
 out.close(); //关闭输出流
}解析这样的
public List<Person> getPersons(String path) throws Throwable{
Person  p = null;
System.out.println("11");
InputStream in = getInputStream(path);
System.out.println("22");
List<Person> persons = null;
XmlPullParser parser = Xml.newPullParser();
System.out.println("33");
parser.setInput(in,"UTF-8");
int event = parser.getEventType();
System.out.println("44");
 while(event!=XmlPullParser.END_DOCUMENT){
 System.out.println("55");//如果不是文档结束事件
  switch(event){
   case XmlPullParser.START_DOCUMENT:
   persons=new ArrayList<Person>(); 
   System.out.println("66");//在文档的开始实例化集合
   break;
   case XmlPullParser.START_TAG:
   String name=parser.getName();//取得当前解析器指向的元素名称
   if("person".equals(name)){
   p=new Person();
   p.setID(parser.getAttributeValue(0));
   }
   if(p!=null){
   if("name".equals(name)){
   p.setName(parser.nextText()); //取得当前解析器指向的下一个元素的文本节点
   System.out.println("88");
   }
   if("age".equals(name)){
   p.setAge(parser.nextText());
   }
   if("sex".equals(name))  p.setSex(parser.nextText());
   }
   System.out.println("99");
   break;
   case XmlPullParser.END_TAG:
   if("person".equals(parser.getName())){  //person标签结束就把数据存入集合
   persons.add(p);
   System.out.println("1010");
   }
   break;
  }
  event=parser.next();
  }
  return persons;
}假如我想把person id="02"的这个人的name 改为“WBW”,要怎么改?求方法思路。

解决方案 »

  1.   

    各位大哥大姐叔叔婶婶,给个思路也行啊,不要管我的创建解析方法,只要能改这个XML里的数据就行,当然,DOM除外实在逼不得己才用DOM。。
      

  2.   

    我看了下api,没发现pull解析能修改xml,我觉得我做的话,可能是先读取xml然后封装成对象,再修改要修改的值,之后再写回去= =好像很蛋疼的样子。。如果需要修改的xml内容不多,你可以尝试直接用正则表达式头换掉