パーサーを手作業で書くのはもちろん楽しく、エラーが発生しやすいですが、フレームワークを使用することをお勧めします。組み込みandroid.sax
パッケージのような単純なものでも構いません。
StartElementListener
(属性がまったく必要な場合)&EndTextListener
(要素の本文テキストをキャプチャする)を使用:
class Section implements StartElementListener, EndTextElementListener {
String mValue;
String mId;
@Override
public void end(String body) {
mValue = body;
}
@Override
public void start(Attributes attributes) {
mId = attributes.getValue("", "id");
}
}
これらのタイプのリスナーは、次のようにElement
a から派生したにアタッチされます。RootElement
Section section = new Section();
RootElement data = new RootElement("data");
// Use "requireChild" if a "section" is required as a child of "data".
Element s = data.getChild("section");
s.setStartElementListener(section);
s.setEndTextElementListener(section);
try {
Xml.parse(xml, data.getContentHandler());
} catch (SAXException e) {
}
基本的に、これは、階層を考慮し、解析している要素を簡単に追跡する SAX 用のコンテンツ ハンドラーを構築するのに役立ちます。短くて気の利いたコードも私は推測します。