SAX で XML 解析
SAX とは Simple API for XML の略で、DOM のように XML の解析をしてから処理をするのでなく、
XML の解析を行いながら処理を行っていきます。 DOM と比べてメモリ消費量が少ないのと解析速度が速いなどの
メリットがありますが、XML の更新はできません。
XML を解析する例を書きます。パーサーには xerces-2.6.2 を利用しています。
XML 例
<?xml version="1.0" encoding="UTF-8" ?>
<document>
<element attribute="attribute">Test</element>
</document>
Java 記述例
public class SAXTest {
public static void main(String[] args) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File("C:/work/test.xml"), new SAXTestHandler());
} catch (Exception e) {
e.printStackTrace();
}
}
// SAX のハンドラクラス
private static class SAXTestHandler extends DefaultHandler {
// Document の開始通知を受け取る
public void startDocument() {
System.out.println("start.....");
}
// 要素の開始通知を受け取る
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("start element: " + qName);
if (qName.equals("element")) {
System.out.println("att: " + attributes.getValue("attribute"));
}
}
// 要素を受け取る
public void characters(char[] ch, int offset, int length) {
if (offset != 0) {
System.out
.println("element :" + new String(ch, offset, length));
}
}
// 要素の終了通知を受け取る
public void endElement(String uri, String localName, String qName) {
System.out.println("end element: " + qName);
}
// Document の終了通知を受け取る
public void endDocument() {
System.out.println("end......");
}
// default constructor
SAXTestHandler() {
}
}
出力結果
start.....
start element: document
start element: element
att: attribute
end element: element
end element: document
end......
|