Velocity 에서 xml 을 사용하기 위해서는 jdom-1.0.jar 사용한다.
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
org.apache.xerces.parsers.SAXParser
를 사용해서 생성한
Document root 객체를 velocity 넘겨주면 이것을 활용하여 xml 의 내용을 분해해서
사용할 수가 있다. 그리고 위의 클래스를 사용하기 위해선 xerces.jar 가 필요하다.
첨부하지 않는다면 다음과 같은 에러가 날것이다.
org.jdom.JDOMException: Could not load
org.apache.xerces.parsers.SAXParser: SAX2 driver class
org.apache.xerces.parsers.SAXParser not found:
org.apache.xerces.parsers.SAXParser
======== 실행 파일
===========
import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
public class IteratorClass {
public static void main(String[] args) throws Exception {
try {
Velocity.init();
SAXBuilder builder;
Document root = null;
try {
builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
root = builder.build("./src/handling.xml");
} catch (Exception
e) {
System.out.println(e);
}
VelocityContext context = new VelocityContext();
context.put("root", root);
Template template = Velocity.getTemplate("./src/handling.vm");
StringWriter writer = new StringWriter();
template.merge(context, writer);
System.out.println(writer);
} catch (Exception
e) {
System.out.println(e);
}
}
}
========= handling.xml ===========
<?xml version="1.0"
encoding="UTF-8"?>
<document>
<student>
<rno>1</rno>
<name>Komal</name>
</student>
<student>
<rno>2</rno>
<name>
</student>
<student>
<rno>3</rno>
<name>Ajay</name>
</student>
</document>
=======
handling.vm =========
#macro ( recursive $e $indent )
#if( $e.getChildren().size() > 0 )
$indent <$e.getName()>
#foreach ($child in $e.getChildren() )
#recursive( $child "$indent " )
#end
$indent </$e.getName()>
#else
$indent <$e.getName()>
$indent $e.getTextTrim()
$indent </$e.getName()>
#end
#end
#set($i = " ")
Handling.xml
#recursive( $root.getRootElement()
$i )
Data directly :
Rno
:
$root.getRootElement().getChild("student").getChild("rno").getText()
Name : $root.getRootElement().getChild("student").getChild("name").getText()
======= 출력 값 =========
Handling.xml
<document>
<student>
<rno>1</rno>
<name> Komal </name>
</student>
<student>
<rno>2 </rno>
<name>
</student>
<student>
<rno>3</rno>
<name>Ajay</name>
</student>
</document>
Data directly :
Rno : 1
Name : Komal
'자바(JAVA)' 카테고리의 다른 글
velocity 페이지에서 java 제공하는 date, 시간관련 객체를 사용하고싶을때 (0) | 2009.02.08 |
---|---|
velocity 에서 쓰이는 자료형 bool, number, String (0) | 2009.02.08 |
velocity java class 객체들을 사용하고자 할 때 (0) | 2009.02.08 |
velocity 에서 배열값을 화면에 그대로 표현하고 싶을 (0) | 2009.02.08 |
싱글톤 생성객체를 재생성하지 못하도록 하자 (0) | 2009.02.05 |
종료자 finally 를 쓸 경우 상위클래스의 객체를 해제해서 메모리 누수를 막자 (0) | 2009.02.05 |
이전 호출함수나, 클래스 등의 정보를 알아오는 방법 (0) | 2009.02.05 |
Java application 에서 velocity 사용하기 (0) | 2009.02.05 |