Java에서 Xml파일 읽는 예제 샘플 소스입니다.
구글 검색해보면 많이 나오겠지만, 2주에 걸쳐 두가지 샘플을 올려보도록 하겠습니다.
그 첫번째 입니다.
addressbook.xml
<?xml version="1.0" encoding="utf-8" ?>
<addressbook>
<person>
<name>이XX</name>
<tel>010-1245-1234</tel>
<address>서울</address>
</person>
<person>
<name>김XX</name>
<tel>010-1245-1234</tel>
<address>경기</address>
</person>
</addressbook>
위와 같이 xml은 태그 형식으로만 되어 있는 간단한 형식입니다.
그다음은 자바 코드입니다.
Java샘플 코드(XmlReaderExample.java)
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlReaderExample {
public static void main(String argv[]) {
try {
File file = new File("./addressbook.xml");
DocumentBuilderFactory docBuildFact = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuild = docBuildFact.newDocumentBuilder();
Document doc = docBuild.parse(file);
doc.getDocumentElement().normalize();
System.out.println("Root element : " + doc.getDocumentElement().getNodeName());
System.out.println();
// person엘리먼트 리스트
NodeList personlist = doc.getElementsByTagName("person");
for (int i = 0; i < personlist.getLength(); i++) {
System.out.println("---------- personNode "+ i + "번째 ------------------");
Node personNode = personlist.item(i);
if (personNode.getNodeType() == Node.ELEMENT_NODE) {
// person엘리먼트
Element personElmnt = (Element) personNode;
// name 태그
NodeList nameList= personElmnt.getElementsByTagName("name");
Element nameElmnt = (Element) nameList.item(0);
Node name = nameElmnt.getFirstChild();
System.out.println("name : " + name.getNodeValue());
// tel 태그
NodeList telList= personElmnt.getElementsByTagName("tel");
Element telElmnt = (Element) telList.item(0);
Node tel = telElmnt.getFirstChild();
System.out.println("tel : " + tel.getNodeValue());
// address 태그
NodeList addressList= personElmnt.getElementsByTagName("address");
Element addressElmnt = (Element) addressList.item(0);
Node address = addressElmnt.getFirstChild();
System.out.println("address : " + address.getNodeValue());
}
System.out.println("---------------------------------------------");
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
저도 처음에 다른 xml샘플 소스를 봤을땐 이게 뭔가 싶었는데....
이것만 봤을때는 좀 이해가 잘 가지 않았습니다.
근데 이게 젤 쉬운 샘플 코드입니다. ^^;
조금 설명 하자면...
personlist는 태그가 person이라는 태그로 시작해서 끝나는 person태그의 리스트를 말합니다.
person태그 안에는 다시 name태그, tel태그, adress태그가 들어있어서 그것들을 빼내오는 겁니다.
정말, 간단하죠.... ^^;
실행결과는 다음과 같습니다.
Root element : addressbook
---------- personNode 0번째 ------------------
name : 이XX
tel : 010-1245-1234
address : 서울
---------------------------------------------
---------- personNode 1번째 ------------------
name : 김XX
tel : 010-1245-1234
address : 경기
---------------------------------------------
다음 시간에는 조금 다른 케이스의 xml로 해보겠습니다.
감사합니다.
저번 시같에 xml파일 읽기를 해봤습니다.
이번 시간은 저번과 좀 다른 xml을 가지고 샘플을 만들어 봤습니다.
xml은 다음과 같습니다. (comboBox.xml)
<?xml version="1.0" encoding="utf-8" ?>
<combolist>
<comboBox name="sex">
<option value="1">남</option>
<option value="2">여</option>
</comboBox>
<comboBox name="hobby">
<option value="1">음악감상</option>
<option value="2">영화보기</option>
<option value="3">축구</option>
<option value="4">야구</option>
<option value="5">골프</option>
<option value="6">기타</option>
</comboBox>
</combolist>
저번 시간의 xml과 틀린점은
저번시간 xml에는 태그만 있었지만, 위xml에는 태그안에 속성이 들어 있는게 틀린점입니다.
comboBox name과 option value가 속성입니다.
그럼, Java소스 코드를 보겠습니다.
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlReaderExample2 {
public static void main(String argv[]) {
try {
File file = new File("./comboBox.xml");
DocumentBuilderFactory docBuildFact = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuild = docBuildFact.newDocumentBuilder();
Document doc = docBuild.parse(file);
doc.getDocumentElement().normalize();
System.out.println("Root element : " + doc.getDocumentElement().getNodeName());
System.out.println();
// comboBox엘리먼트 리스트
NodeList comboBoxlist = doc.getElementsByTagName("comboBox");
for (int i = 0; i < comboBoxlist.getLength(); i++) {
System.out.println("---------- comboBoxNode "+ i + "번째 ------------------");
Node comboBoxNode = comboBoxlist.item(i);
if (comboBoxNode.getNodeType() == Node.ELEMENT_NODE) {
// comboBox엘리먼트
Element comboBoxElmnt = (Element) comboBoxNode;
// 콤보박스 명
System.out.println("comboBox name : " + comboBoxElmnt.getAttribute("name"));
// option 태그
NodeList optList= comboBoxElmnt.getElementsByTagName("option");
for (int j = 0; j < optList.getLength(); j++) {
Element optElmnt = (Element) optList.item(j);
Node name = optElmnt.getFirstChild();
System.out.println("option : " + name.getNodeValue() + " value : " +optElmnt.getAttribute("value"));
}
}
System.out.println("---------------------------------------------");
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java코드도 저번시간과 거의 비슷하지만, 속성값을 취득하는 comboBoxElmnt.getAttribute("name"), optElmnt.getAttribute("value") 부분이 추가 되었습니다.
실행결과는 다음과 같습니다.
[실행결과]
Root element : combolist
---------- comboBoxNode 0번째 ------------------
comboBox name : sex
option : 남 value : 1
option : 여 value : 2
---------------------------------------------
---------- comboBoxNode 1번째 ------------------
comboBox name : hobby
option : 음악감상 value : 1
option : 영화보기 value : 2
option : 축구 value : 3
option : 야구 value : 4
option : 골프 value : 5
option : 기타 value : 6
---------------------------------------------
저번 시간의 Java샘플과 이번 시간의 Java샘플 두개를 비교 해보면서 해보시면 쉽게 할 수 있을꺼라 생각됩니다.
저만 그렇게 생각 하는 건가요? ^^;
감사합니다.