도래울

[JAVA] [Android] XML DOM Tree 구조 파악하기 본문

개발/Android

[JAVA] [Android] XML DOM Tree 구조 파악하기

도래울 2016. 2. 5. 11:35

안드로이드 코딩을 하다가 문제점이 발견됐다.

JAVA에서 DOM Tree를 XML 파일로 바꿔주는 내 친구였던,

javax.xml.transform 패키지를 사용할 수 없다는 거였다.

뚜둥...................

무려 하루종일 삽질을 한 끝에 결론은 세가지 정도였다.

 

1. SAX를 공부하자.

2. XMLPullParser를 공부하자.

3. 계속 고민하자.

 

나는 제 4의 옵션을 택했다. JAVA의 API 를 사용하지 않고 DOM 을 XML 파일로 전환하자.

1번이나 2번 옵션을 택하려면 또 XML parsing부터 새로 공부를 해야 하니..

차라리 내 선택이 시간을 아끼는 길이었다.

 

그러기 위해서 다시 공부를 시작하려는데!!

DOM Tree의 노드 타입이 엄청 헷갈리기 시작했다.-_-;;

그래서 간단한 예제와 함께 DOM Tree의 노드 타입에 대해 한번 블로깅 해보기로 했다.

 

 

다음은 DOMTree의 간단한 예제이다.

여기서 헷갈리던 것은, 과연 Name이 Text_Node인지, Heesuk 이 Text_Node인지라는 것이다.

이게 헷갈려서 간단히 테스트를 해보았다.

결론을 먼저 말하면,

Heesuk 노드는 TEXT_NODE로서, ELEMENT_NODE인 Name노드의 자식노드이다.

 

이것을 확인하려면 다음과 같이 해보면 된다.

 

root.getFirstChild().getNodeType() 을 확인해보면 '1'이 나올 것이다. 이것은 ELEMENT_NODE임을 의미한다.

root.getFirstChild().getFirstChild().getNodeType() 을 확인해보면 '3'이 나올 것이다. 이는 TEXT_NODE임을 의미한다.

 

여기서 그럼 Heesuk이라는 String 값을 가져오려면 어떻게 해야할까?

 

두가지 방법이 있다.

첫째, root.getFirstChild().getTextContent() 값을 호출하면 된다.

평상시에는 문제가 되지 않지만, Android상에서는 왜그런지 getTextContent() 메쏘드를 사용하면 에러가 나더라.

이럴 때는 DOMTree의 구조를 안다면 간단하게 해결할 수 있다.!

root.getFirstChild().getFirstChild().getNodeValue()를 사용하면 된다.

이 메쏘드는 Android에서도 먹히기 때메 별 고민이 없어서 좋다.

 

간단한 거지만,

아무도 블로깅을 해놓지 않아 내가 직접 테스트 해봐야 했기에,

혹시 나같은 동지가 있을까 블로깅 해본다.

 


Comments