!! children 이라는 의미는 나의 자식만을 의미하지 자식의 자식..손주까지 의미하진 않는다.
그건 자식의 children 일 뿐이다....
<?xml version="1.0" encoding="euc-kr"?><br/>
<inventory><br/>
<book year="2000"><br/>
<title name="Snow Crash"><br/>
<genre>novel</genre><br/>
</title><br/>
<br/>
<author>Neal Stephenson</author><br/>
<publisher>Spectra</publisher><br/>
<isbn>0553380958</isbn><br/>
<price>14.95</price><br/>
</book><br/>
<book year="2005"><br/>
<title>Burning Tower</title><br/>
<author>Larry Niven</author><br/>
<author>Jerry Pournelle</author><br/>
<publisher>Pocket</publisher><br/>
<isbn>0743416910</isbn><br/>
<price>5.99</price><br/>
</book><br/>
<book year="1995"><br/>
<title>Zodiac</title><br/>
<author>Neal Stephenson</author><br/>
<publisher>Spectra</publisher><br/>
<isbn>0553573862</isbn><br/>
<price>7.50</price><br/>
</book><br/>
</inventory>
----------------------------------------------------------------------------
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.DocType;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class JDOM001 {
public static void main(String[] args) {
try {
SAXBuilder builder = new SAXBuilder();
Document jdomdoc = builder.build("src/books.xml");
// 우선 root 엘리먼트를 가져온다. 여기서는 inventory
Element root= jdomdoc.getRootElement();
DocType docType = jdomdoc.getDocType();
System.out.println();
System.out.println("Root element:");
System.out.println(" Name: "+root.getName());
System.out.println(" Text(trimmed): '"+root.getTextTrim()+"'");
// 파싱을 위해 메스드에 넘김
nodeParser(root);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// parent에 해당하는 element 를 받게 된다.
public static void nodeParser(Element p_el) {
// 현재의 parent 에 해당하는 element의 자식들!을 가져온다.
List list = p_el.getChildren();
// children을 Iterator에 담음...
Iterator it = list.iterator();
while(it.hasNext()) {
// 엘리먼트 하나만 꺼내
Element e = (Element)it.next();
// 그 엘리먼트의 속성값들을 List에 담는다.
List attList = e.getAttributes();
// 속성이 있다면 속성을 찍는다.--------------------------------------------------------
if (attList.size() != 0) {
// 역시 속성리스트를 다시 iterator 로 담고
Iterator i = attList.iterator();
while(i.hasNext()) {
/** Attribute 파싱 **/
// iterator 로 부터 하나의 속성을 꺼내와서...
Attribute at = (Attribute)i.next();
System.out.println("속성이 존재한다.");
System.out.println("node : " + e.getName());
System.out.println("attribute : " + at.getName() +" attribute value : " + at.getValue());
} // end of while
} // end of 속성 if
// 속성 가져오기 끝....-----------------------------------------------------------------
// 이제 자식들중에서 가져온 자식하나가 또 children 노드들을 가지고 있는지 확인하자구...
List li = e.getChildren();
// 자식노드가 존재한다면.... 다시 nodeParser에 넣어서 계속 children을 타고 내려가야한다.
if (li.size() != 0) {
System.out.println("자식노드(모든서브)가 존재한다. childeren list size : "+ li.size());
nodeParser(e); /** recursive call **/
} else {
System.out.println("자식은 더이상 없고 노드에 값이 있음 childeren list size : "+ li.size());
/** 노드의 값이 있는 경우에만 출력 **/
if (!e.getValue().trim().equals("")) {
System.out.println("parent node : " + e.getParentElement().getName() + " current node : " + e.getName());
System.out.println("value : " + e.getValue());
}
} // end of if
} // end of while
} // end of nodeParser
}
-----------------------------------------------------------
Root element:
Name: inventory
Text(trimmed): ''
속성이 존재한다.
node : book
attribute : year attribute value : 2000
자식노드(모든서브)가 존재한다. childeren list size : 5
속성이 존재한다.
node : title
attribute : name attribute value : Snow Crash
자식노드(모든서브)가 존재한다. childeren list size : 1
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : title current node : genre
value : novel
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0553380958
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 14.95
속성이 존재한다.
node : book
attribute : year attribute value : 2005
자식노드(모든서브)가 존재한다. childeren list size : 6
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : title
value : Burning Tower
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Larry Niven
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Jerry Pournelle
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Pocket
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0743416910
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 5.99
속성이 존재한다.
node : book
attribute : year attribute value : 1995
자식노드(모든서브)가 존재한다. childeren list size : 5
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : title
value : Zodiac
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0553573862
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 7.50
from http://blog.naver.com/rogerrb?Redirect=Log&logNo=100025402433
주석 추가 : ez
그건 자식의 children 일 뿐이다....
<?xml version="1.0" encoding="euc-kr"?><br/>
<inventory><br/>
<book year="2000"><br/>
<title name="Snow Crash"><br/>
<genre>novel</genre><br/>
</title><br/>
<br/>
<author>Neal Stephenson</author><br/>
<publisher>Spectra</publisher><br/>
<isbn>0553380958</isbn><br/>
<price>14.95</price><br/>
</book><br/>
<book year="2005"><br/>
<title>Burning Tower</title><br/>
<author>Larry Niven</author><br/>
<author>Jerry Pournelle</author><br/>
<publisher>Pocket</publisher><br/>
<isbn>0743416910</isbn><br/>
<price>5.99</price><br/>
</book><br/>
<book year="1995"><br/>
<title>Zodiac</title><br/>
<author>Neal Stephenson</author><br/>
<publisher>Spectra</publisher><br/>
<isbn>0553573862</isbn><br/>
<price>7.50</price><br/>
</book><br/>
</inventory>
----------------------------------------------------------------------------
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.DocType;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class JDOM001 {
public static void main(String[] args) {
try {
SAXBuilder builder = new SAXBuilder();
Document jdomdoc = builder.build("src/books.xml");
// 우선 root 엘리먼트를 가져온다. 여기서는 inventory
Element root= jdomdoc.getRootElement();
DocType docType = jdomdoc.getDocType();
System.out.println();
System.out.println("Root element:");
System.out.println(" Name: "+root.getName());
System.out.println(" Text(trimmed): '"+root.getTextTrim()+"'");
// 파싱을 위해 메스드에 넘김
nodeParser(root);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// parent에 해당하는 element 를 받게 된다.
public static void nodeParser(Element p_el) {
// 현재의 parent 에 해당하는 element의 자식들!을 가져온다.
List list = p_el.getChildren();
// children을 Iterator에 담음...
Iterator it = list.iterator();
while(it.hasNext()) {
// 엘리먼트 하나만 꺼내
Element e = (Element)it.next();
// 그 엘리먼트의 속성값들을 List에 담는다.
List attList = e.getAttributes();
// 속성이 있다면 속성을 찍는다.--------------------------------------------------------
if (attList.size() != 0) {
// 역시 속성리스트를 다시 iterator 로 담고
Iterator i = attList.iterator();
while(i.hasNext()) {
/** Attribute 파싱 **/
// iterator 로 부터 하나의 속성을 꺼내와서...
Attribute at = (Attribute)i.next();
System.out.println("속성이 존재한다.");
System.out.println("node : " + e.getName());
System.out.println("attribute : " + at.getName() +" attribute value : " + at.getValue());
} // end of while
} // end of 속성 if
// 속성 가져오기 끝....-----------------------------------------------------------------
// 이제 자식들중에서 가져온 자식하나가 또 children 노드들을 가지고 있는지 확인하자구...
List li = e.getChildren();
// 자식노드가 존재한다면.... 다시 nodeParser에 넣어서 계속 children을 타고 내려가야한다.
if (li.size() != 0) {
System.out.println("자식노드(모든서브)가 존재한다. childeren list size : "+ li.size());
nodeParser(e); /** recursive call **/
} else {
System.out.println("자식은 더이상 없고 노드에 값이 있음 childeren list size : "+ li.size());
/** 노드의 값이 있는 경우에만 출력 **/
if (!e.getValue().trim().equals("")) {
System.out.println("parent node : " + e.getParentElement().getName() + " current node : " + e.getName());
System.out.println("value : " + e.getValue());
}
} // end of if
} // end of while
} // end of nodeParser
}
-----------------------------------------------------------
Root element:
Name: inventory
Text(trimmed): ''
속성이 존재한다.
node : book
attribute : year attribute value : 2000
자식노드(모든서브)가 존재한다. childeren list size : 5
속성이 존재한다.
node : title
attribute : name attribute value : Snow Crash
자식노드(모든서브)가 존재한다. childeren list size : 1
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : title current node : genre
value : novel
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0553380958
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 14.95
속성이 존재한다.
node : book
attribute : year attribute value : 2005
자식노드(모든서브)가 존재한다. childeren list size : 6
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : title
value : Burning Tower
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Larry Niven
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Jerry Pournelle
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Pocket
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0743416910
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 5.99
속성이 존재한다.
node : book
attribute : year attribute value : 1995
자식노드(모든서브)가 존재한다. childeren list size : 5
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : title
value : Zodiac
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : isbn
value : 0553573862
자식은 더이상 없고 노드에 값이 있음 childeren list size : 0
parent node : book current node : price
value : 7.50
from http://blog.naver.com/rogerrb?Redirect=Log&logNo=100025402433
주석 추가 : ez
'Java' 카테고리의 다른 글
Struts 2.1.8 과 Tiles 2.1.4 버전을 이용하는 예제 (0) | 2010.07.14 |
---|---|
스트러츠(struts)를 써보자. (0) | 2010.07.14 |
JDOM(THE JAVA DOM) (0) | 2010.06.29 |
jDOM과 json.jar 라이브 러리 다운 로드 방법 (0) | 2010.06.29 |
[자바 기초]JDBC 연결 소스 예제 java (0) | 2010.06.25 |