반응형
출처: http://kr.blog.yahoo.com/kwon37xi/folder/3381246.html
TEXT 클래스
- org.jdom.Text
- Element 클래스는 getText() 메소드로 텍스트를 얻을 수 있지만, 내부적으로는 Text 클래스의 인스턴스를 만들어서 요소의 텍스트를 저장한다.
- 이렇게 한 이유는 트리모델에서 탐색을 용이하게 하기 위해서이다.
EntityRef 클래스
- org.jdom.EntityRef
- XML 엔티티 참조를 나타낸다.
- 만약 엔티티가 XML DTD나 스키마를 참조한다면, 이 클래스로 이름, 공개ID, 시스템ID를 설정하거나 반환할 수 있다.
- JDOM 컨텐트 트리의 어디에나 위치할 수 있다.
- 거의 사용되지 않는다.
- EntityRef를 사용하기 위해서는 엔티티 확장을 하지 않게 해야한다.
SAXBuilder builder = new SAXBuilder(); // 엔티티 참조를 확장하지 않는다.(기본값은 true) builder.setExpandEntities(false); // EntityRef 객체를 포함하는 트리 생성 Document doc = builder.build(inputStream);
- 엔티티 확장을 true로 하면 엔티티를 만날 때는 실제 엔티티의 값으로 바뀐 것을 읽게 된다.
- 엔티티 참조 생성
EntityRef ref = new EntityRef("TrueNorthGuitarsTagline"); ref.setSystemID("tngTagline.xml"); // 트리에 넣는다. tagLineElement.addContent(ref);
Namespace 클래스
- org.jdom.Namespace
- 요소를 생성하거나 요소를 검색하는데 새로운 네임스페이스가 필요하다면, Namespace 클래스의 정적 메소드인 getNamespace()를 사용해야 한다.
// 접두어가 있는 네임스페이스를 생성한다. Namespace schemaNamespace = Namespace.getNamespace("xsd", "http://www.w3.org/XMLSchema/2001"); // 접두어가 없는 네임스페이스를 생성한다. Namespace javaxml2Namespace = Namespace.getNamespace("http://www.oreilly.com/javaxml2");
- 네임스페이스 적용
// 네임스페이스가 있는 요소 생성 Element schema = new Element("schema", schemaNamespace); // 특정한 네임스페이스에 속한 자식 요소들을 찾는다. List chapterElements = contentElement.getChildren("chapter", javaxml2Namespace); // 요소에 새로운 네임스페이스를 선언한다. catalogElement.addNamespaceDeclaration( Namespace.getNamespace("tng", "http://www.truenorthguitars.com");
- 접두어와 상관없이 Namespace의 URI가 동일하면 Namespace객체는 동일하다. - 이것은 표준 규약을 따르는 것이다.
JDOM Factory
- org.jdom.JDOMFactory 인터페이스는 JDOM에 있는 모든 타입의 객체를 생성하기 위한 여러 메소드를 정의하고 있다.
- 보통 JDOM은 org.jdom.DefaultJDOMFactory 클래스를 사용해서 JDOM 트리를 구성한다. DefaultJDOMFactory 클래스를 상속하여 자신만의 팩토리 클래스를 작성할 수 있다.
class CustomJDOMFactory extends org.jdom.DeafultJDOMFactory { .... }
- 사용자 정의 Factory 사용해서 JDOM 트리 구성하기 : setFactory(factory)
SAXBuilder builder = new SAXBuilder(); JDOMFactory factory = new CustomJDOMFactory(); // 사용자 정의 팩토리를 사용하도록 설정 builder.setFactory(factory);
- JDOMFactory를 사용할 때는 필요한 메소드가 정확히 구현되었는지 확실히 확인해야 한다.