簡単な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など)を利用する必要があります。