求修改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”,要怎么改?求方法思路。
比如说有这么一个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”,要怎么改?求方法思路。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货