Androidデータストレージとアクセスのためのpull解析器の使用


Pull解析器はオープンソースjavaプロジェクトで、androidにもJavaEEにも使用できます.JavaEEでjarファイルをクラスパスに入れる必要がある場合は、AndroidがPull解析器に統合されているため、jarファイルを追加する必要はありません.Androidシステム自体で使用される各種xmlファイルは,その内部もPull解析器で解析される.Pull解析器の動作はSAX解析器と似ています.開始要素と終了要素イベント、parserを使用するなど、類似のイベントを提供します.next()は、次の要素に入り、対応するイベントをトリガーできます.SAXとは異なり,Pull解析器で発生したイベントはメソッドではなく数値であるため,興味のあるイベントをswitchで処理することができる.要素が解析を開始するとparserが呼び出される.nextText()メソッドは、次のTextタイプノードの値を取得することができる.
解析するXMLファイルのファイル名は次のとおりです:persons.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id=“18">
        <name>allen</name>
        <age>36</age>
    </person>
    <person id=“28">
        <name>james</name>
        <age>25</age>
    </person>
</persons>

例は、上で解析したxmlコンテンツを格納するためにjavabeanを定義し、このjavabeanはPersonであり、以下のようにする.
public class Person {
	private Integer id;
	private String name;
	private Short age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Short getAge() {
		return age;
	}
	public void setAge(Short age) {
		this.age = age;
	}	
}

Pull解析器を使用してitcastを読み込む.xmlのコードは次のとおりです.
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import cn.itcast.xml.domain.Person;

public class PullXMLReader {

public static List<Person> readXML(InputStream inStream) {
    XmlPullParser parser = Xml.newPullParser();
    try {
    parser.setInput(inStream, "UTF-8");
    int eventType = parser.getEventType();
    Person currentPerson = null;
    List<Person> persons = null;
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
        case XmlPullParser.START_DOCUMENT://      ,           
            persons = new ArrayList<Person>();
            break;
        case XmlPullParser.START_TAG://      
            String name = parser.getName();
            if (name.equalsIgnoreCase("person")) {
                currentPerson = new Person();
                currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
            } else if (currentPerson != null) {
                if (name.equalsIgnoreCase("name")) {
                    currentPerson.setName(parser.nextText());//      Text  ,      
                } else if (name.equalsIgnoreCase("age")) {
                    currentPerson.setAge(new Short(parser.nextText()));
                }
            }
            break;
        case XmlPullParser.END_TAG://      
            if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {
                persons.add(currentPerson);
                currentPerson = null;
            }
            break;
        }
        eventType = parser.next();
    }
    inStream.close();
    return persons;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
}

Pull解析器を使用したXMLファイルの生成
いくつかの場合、XMLファイルを生成する必要があります.XMLファイルを生成する方法はたくさんあります.例えば、StringBuilderグループを使用してXMLコンテンツをスペルし、ファイルにコンテンツを書き込むことができます.DOM APIを使用してXMLファイルを生成したり、pull解析器を使用してXMLファイルを生成したりすることもできますが、ここではPull解析器を使用することをお勧めします.
Pull解析器を使用してpersonsを生成します.xml
次のようにコードを使用します(XMLファイルを生成します).
File xmlFile = new File("persons.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
BufferedWriter writer = new BufferedWriter(outStreamWriter);
writeXML(persons, writer);
writer.flush();
writer.close();
生成されたxml文字列の内容のみを取得する場合は、StringWriterを使用します.
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();