はじめに
今回はJavaで「XMLファイル」の読み込み・書き込み方法について勉強したことを記載していきたいと思います。
XMLファイルとは
XMLファイル(eXtensible Markup Language)とは、XMLという形式/ルールで書かれたファイルのことです。
・テキストで記載された文書である
・XML 宣言をすること
<?xml version=”1.0″?>
・中身をタグで囲み、タグ内でデータを記載していくこと
例
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<blogs>
<blog>
<name>SEもりのLog</name>
<auther>もり</auther>
</blog>
<blog>
<name>Test</name>
<auther>test</auther>
</blog>
</blogs>
DOMを使用したXMLの読み込み
javax.xml.parsers.DocumentBuilderを使用することでXMLファイルからファイルデータを読み込むことができます。DocumentBuilderはDocumentBuilderFactoryから取得して使用します。
import
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
例
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// XMLを読み込み
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse("test.xml");
// 要素のリストを取得
NodeList nodeList = document.getElementsByTagName("blog");
// 要素の中身を一つずつ取得
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println(element.getElementsByTagName("name").item(0).getTextContent());
System.out.println(element.getElementsByTagName("auther").item(0).getTextContent());
}
}
}
DOMを使用したXMLファイルの作成
読み込みと同様にjavax.xml.parsers.DocumentBuilderを使用してXMLを作成することができます。ファイル出力はTransformerを使用して出力形式をXML指定しファイル出力します。
例
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// XMLを読み込み
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty("method", "xml");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
Document document = documentBuilder.newDocument();
// XMLファイルの作成
Element blogs = document.createElement("blogs");
document.appendChild(blogs);
Element blog = document.createElement("blog");
blogs.appendChild(blog);
Element name = document.createElement("name");
name.setAttribute("name", "ブログ名");
name.appendChild(document.createTextNode("SEもりのLog"));
blog.appendChild(name);
Element auther = document.createElement("auther");
auther.appendChild(document.createTextNode("もり"));
blog.appendChild(auther);
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test.xml")));
transformer.transform(new DOMSource(document), new StreamResult(writer));
} finally {
if (writer != null) {
writer.close();
}
}
}
StAXを使用してXMLファイルを読み込む
javax.xml.stream.XMLStreamReaderを使用することでもXMLファイルを読み込むことが可能です。
例
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
try (InputStream input = new FileInputStream("test.xml")) {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(input);
while (reader.hasNext()) {
switch (reader.getEventType()) {
case XMLStreamConstants.CHARACTERS:
System.out.println(reader.getText());
break;
case XMLStreamConstants.START_ELEMENT:
System.out.println(reader.getLocalName());
break;
default:
}
reader.next();
}
reader.close();;
} catch (Exception e) {
e.printStackTrace();
}
}
StAXを使用してXMLファイルを書き込む
javax.xml.stream.XMLStreamWriterを使用することで、XMLを作成することが可能です。
例
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
StringWriter strWriter = new StringWriter();
XMLStreamWriter writer = factory.createXMLStreamWriter(strWriter);
writer.writeStartDocument("UTF-8", "1.0");
writer.writeStartElement("blogs");
writer.writeStartElement("blog");
writer.writeStartElement("name");
writer.writeDTD("SEもりのLog");
writer.writeEndElement();
writer.writeStartElement("auther");
writer.writeDTD("もり");
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();
writer.close();
System.out.println(strWriter.toString());
}
ドキュメント
【公式ドキュメント】
Java SE Specifications (oracle.com)
最後に
Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)
以上、ログになります。
これからも継続していきましょう!!
コメント