兼容爲便於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
對象。以下項目將被添加到最後一個類別對象。在閱讀內容時,您將創建稍後需要的層次結構(項目將添加到適當的類別中)。 它應該很容易將這一代碼,而不是使用SAX解析器XmlPullParser。我只是用薩克斯因爲我更熟悉它。
當你讀完你需要你的層次寫到一個新文件的第一個文件。
你可以在這樣的方式做到這一點:
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();
}
每個項目在其getXml()
方法創建自己的XML可能是
public String getXml() {
return "<item1 />";
}
在最簡單的情況。
請注意用手該建築物XML只適合,如果你的XML結構保持簡單。如果結構變得越來越複雜,您應該使用一些適用於Android的輕量級xml庫(如xstream)。
我讀書各地。可能是XSLT的答案? – butelo 2011-12-27 19:46:56