SAXパーサー:JavaでXMLファイルを読み取る方法

Sax パーサ Saxは最新のDOMで最も人気のあるパーサーですが、DOMとは異なり、Saxの動作は異なり、XMLを処理する前にメモリにロードせず、XMLオブジェクトの種類も作成しません。SAX は、メモリの消費量が少ないため、大きな xml ファイルの解析に適しています。

SAX パーサーは、3 つのメソッドを使用して xml:

startElement(): SAXパーサーは、開始タグ'<'を検出するたびに、startElement().

endElement(): at SAXパーサーは、終了タグ'>'を検出するたびに、startElement().

characters(): このメソッドは、SAXパーサーが開始タグと終了タグの間のテキストを検出したときに呼び出されます

これら3つのメソッドはxmlの解析を担当し、プログラマはそれらを使用してコードから情報を解析、読み取り、または抽出します。

javaJavaコードをテストするには、 コンソールにその内容を表示するために使用する単純なXMLファイルを作成する必要があります:


<連絡先>
<ユーザー ID = "1">
<名前>エンコーダー
<お名前(名)>ジャワ
<モバイル>054124587
codeurjava@gmail.com

<ユーザー ID = "2" >
<名前>エンコーダー
<お名前(名)>C++の
<モバイル>062148795
codeurcplusplus@gmail.com


The java:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ReadFileXML{

public static void main(String argv[]) {

try {
//sax parser
SAXParserFactory spfactory = SAXParserFactory.newInstance();
//パーサーのインスタンスを取得します
SAXParser saxParser = spfactory.newSAXParser();

/*3 つのメソッドはすべて DefaltHandler で宣言されています /> corp DefaultHandler handler = new DefaultHandler() {

boolean bnom = false;
boolean bprefirst name = false;
boolean bmobile = false;
boolean bemail = false;

/*このメソッドは、パーサーが
開始タグ '<' を検出するたびに呼び出されます */
public void startElement(String uri, String localName,
String qName,Attributes attributes) throws SAXException{

if (qName.equalsIgnoreCase("name")) {
bnom = true;
}

if (qName.equalsIgnoreCase("firstname")) {
bfirstname = true;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = true;
}

if (qName.equalsIgnoreCase("email")) {
bemail = true;
}
}

/*このメソッドは、パーサーが終了タグ '>'
を検出するたびに呼び出されます */
public void endElement(String uri, String localName,
String qName) throws SAXException {

if (qName.equalsIgnoreCase("name")) {
bnom = false;
}

if (qName.equalsIgnoreCase("firstname")) {
bfirstname = false;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = false;
}

if (qName.equalsIgnoreCase("email")) {
bemail = false;
}
}

/*'<' と '> の間に格納されたデータを出力します */
public void characters(char ch[], int start,
int length) throws SAXException {

if (bnom) {
System.out.println("Name: " +
new String(ch, 開始、長さ));
bnom = false;
}

if (bprename) {
System.out.println("名: " +
new String(ch, start, length));
b名= false;
}

if (bmobile) {
System.out.println("Mobile : " +
new String(ch, start, length));
bmobile = false;
}

if (bemail) {
System.out.println("Email : " +
new String(ch, start, length));
bemail = false;
}
}

};

saxParser.parse("exemple.xml", handler);

} catch (例外 e) {
e.printStackTrace();
}
}
}
Execution:

姓: coder
名: java
Mobile: 054124587
Email: codeurjava@gmail.com

姓: coder
名: c++
Mobile: 062148795
Email: codeurcplusplus@gmail.com