こんにちは!しーま(@s59shima)です。
いつもブログをご覧いただきありがとうございます。
今回は、こんな悩みや疑問のある方に向けて記事を書きました。

読書
XMLファイルの読み込みを行う方法について知りたいな。階層とか要素の取得とか難しそうだな。
JavaでXMLを読み込む方法について詳しく知りたい方にはおすすめの記事です。
フリーランス おすすめ エージェント一覧
JavaでXMLファイルを読み込むには
XMLファイルを読み込むための方法は色々あります。それぞれのAPIにはメリット・デメリットがあります。よって、目的によって使い分ける必要があります。
本記事で活用するAPIについて
- DOM(Document Object Model)
- メリット:要素の追加・削除が可能
- デメリット:メモリ消費量が多い
- SAX(Simple API for XML)
- メリット:メモリ消費量が少なく、読み込み処理が高速
- デメリット:要素の追加・削除が不可
使用するXML
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer id="1000">
<name>
<firstname>taro</firstname>
<lastname>sato</lastname>
</name>
<programming>Java</programming>
</customer>
</customers>
DOM – API
XMLをオブジェクトのツリー構造で読み込みます。javax.xml.parsers.DocumentBuilderクラスを使用します。
サンプルコード
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
class Sample4 {
public static void main( String[] args ) {
try ( InputStream is = Files.newInputStream(Paths.get( "D:\ws_java\sample.xml" ))) {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Node root = builder.parse( is );
readXml( root );
} catch ( ParserConfigurationException | IOException | SAXException e ) {
System.out.println( e.getMessage() );
}
}
private static void readXml( Node node ) {
Node child = node.getFirstChild();
while( child != null ) {
System.out.println( child.getNodeName() + " = " + child.getNodeValue() );
NamedNodeMap attributes = child.getAttributes();
if ( attributes != null ) {
for ( int index = 0; index < attributes.getLength(); index++ ) {
Node attribute = attributes.item( index );
System.out.print( "Attribute: " );
System.out.println( attribute.getNodeName() + " = " + attribute.getNodeValue() );
}
}
readXml( child );
child = child.getNextSibling();
}
}
}
実行結果
customers = null
#text =
customer = null
Attribute: id = 1000
#text =
name = null
#text =
firstname = null
#text = taro
#text =
lastname = null
#text = sato
#text =
#text =
programming = null
#text = Java
#text =
#text =
SAX – API
XMLファイルを上から順番に読み込んで処理を実行します。javax.xml.parsers.SAXParserとorg.xml.sax.helpers.DefaultHandlerクラスを使用します。
サンプルコード
Sampleクラス
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class Sample {
public static void main( String[] args ) {
try ( InputStream is = Files.newInputStream(Paths.get("D:\ws_java\sample.xml")) ) {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
SampleHandler handler = new SampleHandler();
parser.parse(is, handler);
parser = factory.newSAXParser();
} catch ( ParserConfigurationException | SAXException | IOException e ) {
System.out.println( e.getMessage() );
}
}
}
SampleHandlerクラス(DefaultHandlerクラスを継承)
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class SampleHandler extends DefaultHandler {
@Override
public void startDocument() {
System.out.println( "start Doc" );
}
@Override
public void endDocument() {
System.out.println( "end Doc" );
}
@Override
public void startElement (String namespaceURI, String localName, String qName, Attributes atts ) {
if ( atts != null ) {
for ( int index = 0; index < atts.getLength(); index++ ) {
System.out.println( "Attribute: " + atts.getQName(index) );
}
}
System.out.println( "Start Element: " + qName );
}
@Override
public void endElement (String namespaceURI, String localName, String qName ) {
System.out.println( "End Element: " + qName );
}
@Override
public void characters (char[] ch, int start, int length ) {
String text = new String (ch, start, length );
System.out.println( "Text: " + text );
}
}
実行結果
start Doc
Start Element: customers
Text:
Attribute: id
Start Element: customer
Text:
Start Element: name
Text:
Start Element: firstname
Text: taro
End Element: firstname
Text:
Start Element: lastname
Text: sato
End Element: lastname
Text:
End Element: name
Text:
Start Element: programming
Text: Java
End Element: programming
Text:
End Element: customer
Text:
End Element: customers
end Doc
本記事のまとめ
今回は、XMLファイルの操作(読み込み)について解説しました。
最後まで読んでいただきありがとうございます(*^-^*)
本記事の内容をまとめると以下の通りです。
本記事で活用するAPIについて
- DOM(Document Object Model)
- メリット:要素の追加・削除が可能
- デメリット:メモリ消費量が多い
- SAX(Simple API for XML)
- メリット:メモリ消費量が少なく、読み込み処理が高速
- デメリット:要素の追加・削除が不可
各ファイルの操作方法を紹介
本ブログで紹介する各ファイル操作(読み込み・書き込み)は下記5つ。
各ファイルの読み書きを解説
- XMLファイルの読み込み
本記事はココ!
おすすめ記事
「Javaプログラミングをもう一度本格的に勉強したいっ!」という方へ
逆に、「Javaプログラミング以外を本格的に勉強したいっ!」という方へ