Skip to content

Instantly share code, notes, and snippets.

@jiro4989
Last active December 23, 2021 15:17
Show Gist options
  • Save jiro4989/976893971fb67b5d9fdcbaf5f53a49ba to your computer and use it in GitHub Desktop.
Save jiro4989/976893971fb67b5d9fdcbaf5f53a49ba to your computer and use it in GitHub Desktop.
JavaでXML文字列をparseしてObjectを取得する
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class ReadXML {
public static void main(String... args) {
var xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"<people>\n" +
" <person age=\"20\" name=\"taro\"/>\n" +
" <person age=\"23\" name=\"hanako\"/>\n" +
" <person age=\"16\" name=\"foobar\"/>\n" +
"</people>";
try (InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8))) {
var people = readXML(is);
people.stream().forEach(person -> {
System.out.println("name:"+person.name);
System.out.println("age:"+person.age);
});
} catch (Exception e) {}
}
private static List<Person> readXML(InputStream inputStream)
throws ParserConfigurationException, IOException, SAXException {
var factory = DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var document = builder.parse(inputStream);
var root = document.getDocumentElement();
var people = root.getElementsByTagName("person");
List<Person> result = new ArrayList<>();
for (var i = 0; i < people.getLength(); i++) {
var element = (Element) people.item(i);
var name = element.getAttribute("name");
var age = Integer.parseInt(element.getAttribute("age"));
var person = new Person(name, age);
result.add(person);
}
return result;
}
}
class Person {
final String name;
final int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}

前提条件

OpenJDK 16.0.1

実行方法

javac ReadXML.java
java ReadXML

実行結果

name:taro
age:20
name:hanako
age:23
name:foobar
age:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment