!! 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

+ Recent posts