Android saxエンジンがxmlファイルを読み込む原理
4904 ワード
saxエンジンがxmlファイルを読み込む原理:
xmlをsaxで処理するにはHandlerオブジェクトが必要です.一般的にorg.xml.sax.helpers.DefaultHandlerのサブクラスをHandlerオブジェクトとして使用します.
saxテクノロジーは、xmlファイルを処理する際にxmlファイルを一度にメモリにロードするのではなく、一般解析を読みながら処理するので、以下の5つの分析点を処理する必要があります.分析イベントとも呼ばれます.
1. xmlファイルの解析を開始します.この解析点は、saxエンジンがxmlファイルの処理を開始したばかりで、xmlファイルの内容がまだ読み込まれていないことを示します.この解析点はDefaultHandlerクラスのstartDocument()イベントメソッドに対応しており、このメソッドで初期化の作業を行うことができます!
2. 各xml要素の処理を開始します.すなわち、,- のような開始タグに遭遇します.saxエンジンが新しいxml要素の開始タグをスキャンするたびに、この分析イベントがトリガーされます.対応するイベント分析方法はstartElementです.この方法では、現在の要素の名前と要素属性に関する情報を取得できます.
3. 1つのxml要素を処理した後、すなわち、現在処理されている要素のすべての情報を取得できるendElementである 、のような終了フラグに遭遇する.
4. xmlファイルを処理します.もしsaxエンジンがxmlファイル全体の内容をスキャンし終わったら、この分析点に着いて、この分析点に対応するイベント方法endDocument()は、このイベント方法は必要ではないかもしれませんが、最後に以下の終了作業があれば、リソースを解放するなど、その方法で完成することができます!
5. 文字解析ポイントを読み込みます.これは最も重要な分析点です.この解析点がなければ、最初の4ステップの処理は無駄に走ることに相当し、xmlファイルのすべての内容を読み取ったが、これらの内容は保存されていないが、この解析点に対応するcharactersイベントメソッドの主な役割はsaxエンジンが読み取ったxmlファイルの内容を保存することである.より正確にはxml要素のテキスト、すなわちabc のabcを保存する
saxエンジンがxmlファイルを読み取る原理を知ると、使いやすくなります.
次に、saxエンジンがxmlファイルを操作する流れを熟知するために、xmlファイルをjavaオブジェクトに置き換える例を説明します.
1.まずassetsフォルダにproducts.xmlを作成します.
xmlをsaxで処理するにはHandlerオブジェクトが必要です.一般的にorg.xml.sax.helpers.DefaultHandlerのサブクラスをHandlerオブジェクトとして使用します.
saxテクノロジーは、xmlファイルを処理する際にxmlファイルを一度にメモリにロードするのではなく、一般解析を読みながら処理するので、以下の5つの分析点を処理する必要があります.分析イベントとも呼ばれます.
1. xmlファイルの解析を開始します.この解析点は、saxエンジンがxmlファイルの処理を開始したばかりで、xmlファイルの内容がまだ読み込まれていないことを示します.この解析点はDefaultHandlerクラスのstartDocument()イベントメソッドに対応しており、このメソッドで初期化の作業を行うことができます!
2. 各xml要素の処理を開始します.すなわち、
3. 1つのxml要素を処理した後、すなわち、現在処理されている要素のすべての情報を取得できるendElementである
4. xmlファイルを処理します.もしsaxエンジンがxmlファイル全体の内容をスキャンし終わったら、この分析点に着いて、この分析点に対応するイベント方法endDocument()は、このイベント方法は必要ではないかもしれませんが、最後に以下の終了作業があれば、リソースを解放するなど、その方法で完成することができます!
5. 文字解析ポイントを読み込みます.これは最も重要な分析点です.この解析点がなければ、最初の4ステップの処理は無駄に走ることに相当し、xmlファイルのすべての内容を読み取ったが、これらの内容は保存されていないが、この解析点に対応するcharactersイベントメソッドの主な役割はsaxエンジンが読み取ったxmlファイルの内容を保存することである.より正確にはxml要素のテキスト、すなわち
saxエンジンがxmlファイルを読み取る原理を知ると、使いやすくなります.
次に、saxエンジンがxmlファイルを操作する流れを熟知するために、xmlファイルをjavaオブジェクトに置き換える例を説明します.
1.まずassetsフォルダにproducts.xmlを作成します.
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<id>10</id>
<name> </name>
<price>2067.25</price>
</product>
<product>
<id>20</id>
<name> </name>
<price>520</price>
</product>
<product>
<id>30</id>
<name> </name>
<price>2400</price>
</product>
</products>
2.DefaultHandlerを継承し、xml処理クラスを作成し、キーコード: @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
buffer.append(ch, start, length);
//android.util.Log.e(TAG, "characters:"+buffer.toString());
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("product")) {
products.add(product);
} else if (localName.equals("id")) {
product.setId(Integer.parseInt(buffer.toString().trim()));
buffer.setLength(0);
} else if (localName.equals("name")) {
product.setName(buffer.toString().trim());
buffer.setLength(0);
} else if (localName.equals("price")) {
product.setPrice(Float.parseFloat(buffer.toString().trim()));
buffer.setLength(0);
}
super.endElement(uri, localName, qName);
}
@Override
public void startDocument() throws SAXException {
products = new ArrayList<Product>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("product")) {
product = new Product();
}
super.startElement(uri, localName, qName, attributes);
}
3.products.xmlファイル、キーコードを表示します.Button mButton = (Button) findViewById(R.id.MyButton);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InputStream mInputStream = null;
try {
mInputStream = getResources().getAssets().open("products.xml");
} catch (IOException e1) {
e1.printStackTrace();
}
XML2Product xml2Product = new XML2Product();
try {
android.util.Xml.parse(mInputStream, Xml.Encoding.UTF_8,
xml2Product);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
List<Product> products = xml2Product.getProducts();
String msg = " " + products.size() + "
";
for (Product product : products) {
msg += "id:" + product.getId() + " :"
+ product.getName() + " :" + product.getPrice()
+ "
";
}
new AlertDialog.Builder(MainActivity.this).setTitle(" ")
.setMessage(msg).setPositiveButton(" ", null).show();
}
});
}
完全なコードのダウンロード:http://download.csdn.net/detail/dadaxiaoxiaode/5873893