XML practice_240520

Choi Suyeon·2024년 5월 20일

XML 생성

1. XML 문서객체 생성
Document doc = new Document();

2. 최상위 부모노드(근노드, root node)생성
Element deptsNode = new Element("depts");

3. 자식 노드들 생성(DBMS table에서 조회된 결과)
List<DeptVO\> list = xxDAO.selectDept();

Element deptnoNode = null;
Element dnameNode = null;
Element locNode = null;
Element deptNode = null;

for(DeptDomain dd : list){

	deptnoNode = new Element("deptno");
	deptnoNode.setText(String.valueOf(dd.getDeptno()));

	dnameNode = new Element("dname");
	dnameNode.setText(dd.getDname());

	locNode = new Element("loc");
	dnameNode.setText(dd.getLoc());

	4. 부모 노드에 추가
	deptNode = new Element("dept");
	deptNode.addContent(deptnoNode);
	deptNode.addContent(dnameNode);
	deptNode.addContent(locNode);

	5. 최상위 부모노드에 추가
	deptsNode.addContent(deptNode)

}//end for

Domain = VO

select에 조회된 결과를 저장하는 VO
작성방법은 VO작성과 같다.

XML Parsing

XML node를 찾고, node사이에 값을 얻는 것.
<name>홍길동</name>

사용법

1. Builder 생성 - XML을 읽어들여 객체로 생성하는 클래스
SAXBuilder builder = new SAXBuilder();

2. XML과 연결하여 Document클래스를 사용하여 객체로 얻는다.
Local => File class 사용 => 프로그램의 환경설정용으로 사용
Web => URL사용 => 데이터를 얻기 위해서 사용

Document doc = builder.build(new File("절대경로"));//Local에 존재하는 XML얻기
Document doc = builder.build(new java.net.URL("URL"));//Web server에 존재하는 XML얻기

3. 최상위 부모노드를 얻기
Element rootNode = doc.getRootElement();

4. 자식 노드 얻기
- 자식노드가 하나인 경우
Element subNode = rootNode.getChild("노드명");

- 자식노드가 여러 개일 경우
List<Element\> subNodes = rootNode.getChildren("노드명");

- 노드가 하나인 경우 값 얻기
String value = subNode.getValue();

- 여러 개의 노드에서 값 얻기
for(Element subNode : subNodes){
	//특정 노드일 때만 값을 얻어서 지정된 변수에 할당
	if("노드명".equals(subNode.getName())){
		변수명 = subNode.getValue();
	}//end if
}//end for
  • 자식노드가 하나인 경우
1. Builder 생성
SAXBuilder sb = new SAXBuilder();

2. XML문서에 접근하여 Document객체로 생성
Document doc = sb.build(new File("c:/dev/.../msg.xml"));
Document doc = sb.build(new URL("http://loca.../msg.xml"));

3. 최상위 부모노드 얻기
Element rootNode = doc.getRootElement();

4. 자식노드 얻기
Element msgNode = rootNode.getChild("msg");

5. 파싱
String value = msgNode.getValue();
  • 자식노드가 여러 개인 경우
1. 빌더 생성
SAXBuilder builder = new SAXBuilder();

2. XML문서 객체얻기
Document doc = builder.build();//new File() / new URL()

3. 최상위 부모노드 얻기
Element rootNode = doc.getRootElement();

4. 자식노드들 얻기
List<Element>deptNodes = rootNode.getChildren("dept");

5. 반복하면서 자식 노드얻기

Element deptnoNode = null;
Element dnameNode = null;
Element locNode = null;

for(Element deptNode : deptNodes){
	deptnoNode = deptNode.getChild("deptno");
}//end for
또는
for(Element someNode : deptNodes){
	if("노드명".equals(someNode.getName())){
    	변수명.someNode.getValue();
    }//end if
}//end for

6. 특정노드의 값 얻어 변수저장(parsing)

0개의 댓글