1. XML 파싱


JSON이 편리하고 많이 사용되는게 사실이지만, XML 또한 많이 사용되는 것도 사실입니다.

그렇기 때문에, 데이터를 XML로 만드는 것과 XML을 파싱해서 데이터를 이용하는 것 둘 다 할 줄 알아야합니다.

XML 파싱이라는 작업이 워낙에 일반적이다보니 Java는 XML 파서를 내장하고 있습니다.

2. 내장 라이브러리를 사용한 XML 파싱 예제


아래와 같은 구조의 XML 파일이 있다고하겠습니다.

<person sex="w">
    <name>Alsa</name>
    <age>25</age>
</person>
<person sex="m">
    <name>Bob</name>
    <age>28</age>
</person

 

위의 XML 파일에서 <person> 태그의 을 가져오고 싶다면 어떻게 해야 할까요? 🤔

public class DemoXmlParser {

    public void getXmlData(File xmlFile) {
    
        // 1. 빌더 팩토리 생성.
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        
        // 2. 빌더 팩토리로부터 빌더 생성
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        
        // 3. 빌더를 통해 XML 문서를 파싱해서 Document 객체로 가져온다.
        Document document = builder.parse(xmlFile);
        
        // 문서 구조 안정화 ?
        document.getDocumentElement().normalize();
        
        // XML 데이터 중 <person> 태그의 내용을 가져온다.
        NodeList personTagList = document.getElementByTagName("person");
        
        // <person> 태그 리스트를 하나씩 돌면서 값들을 가져온다.
        for (int i = 0; i < personTagList.getLength(); ++i) {
            // 속성 값 가져오기.
            String name = personTagList.item(i).getAttributes().getNamedItem("sex").getNodeValue();
            
            // <person> 태그의 하위 노드들을 가져온다. ( 여기서 노드는 태그를 의미한다. )
            NodeList childNodes = personTagList.item(i).getChildNodes();
            for (int j = 0; j < childNodes.getLength(); ++j) {
                
                if ("name".equals(childNodes.item(j).getNodeName()) {
                    // do somthing...
                }
                
                if ("age".equals(childNodes.item(j).getNodeName()) {
                    // do somthing...
                }
            }
        }
    }
}

 

위의 코드를 보면, 파싱할 XML 파일을 Document 객체에 담아옵니다. 이제 이 Document 객체를 가지고 파싱 작업을 진행하는데요,

위에선 Document#getElementByTagName 메서드를 이용해 <person> 태그를 리스트의 형태로 들고왔습니다.

가져온 태그 목록을 NodeList 객체에 담았는데 하나의 XML 태그가 하나의 Node 객체에 매핑되기 때문입니다.

 

 

 

 

'Programming > Java' 카테고리의 다른 글

[Java] Map을 순회하는 방법  (0) 2020.07.03
[Java] 테스트를 위한 환경 구성  (0) 2020.05.28
[Java] JVM (Java Virture Machine)  (0) 2020.04.19
[Java] try-with-resources로 쉽게 자원해제하기  (0) 2020.04.17
[Java] NIO  (0) 2020.04.17