对于一个简单的 xml 格式,这不应该那么难。
使用 sax 解析器读取第一个 xml 文件的一种可能方法是:
public class MySaxHandler extends DefaultHandler {
private List<Category> items = new LinkedList<Category>();
private Category currentCategory;
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (localName.equals("category")) {
currentCategory = new Category(attributes.getValue("id"));
items.add(currentCategory);
}
if (localName.equals("item1") {
currentCategory.setItem1(new Item1(...));
}
if (localName.equals("item2") {
currentCategory.setItem2(new Item2(...));
}
}
}
为每个<category>
标签创建一个新Category
对象。以下项目将添加到最后一个类别对象。在阅读内容时,您会创建稍后需要的层次结构(项目被添加到适当的类别中)。转换此代码以使用 XmlPullParser 而不是 sax 解析器应该很容易。我只是使用萨克斯,因为我更熟悉它。
当你读完第一个文件后,你需要将你的层次结构写入一个新文件。
您可以通过以下方式执行此操作:
StringBuilder b = new StringBuilder();
for (int i = 0; i < categories.size(); i++) {
b.append(categories.get(i).getXml());
}
// write content of b into file
getXml()
每个类别可能如下所示:
public String getXml() {
StringBuilder b = new StringBuilder();
b.append("<category id=\"" + this.id + "\">");
for (int i = 0; i < items.size(); i++) {
b.append(items.get(i).getXml());
}
b.append("</category>");
return b.toString();
}
每个项目在其方法中创建自己的 xml getXml()
,可以是
public String getXml() {
return "<item1 />";
}
在最简单的情况下。
请注意,仅当您的 xml 结构保持如此简单时,手动构建 xml 才适用。如果结构变得越来越复杂,您应该使用一些适用于 Android 的轻量级 xml 库(如xstream)。