[java] XML 파일에서 중복 요소 제거하기

먼저, 다음과 같은 간단한 XML 파일이 있다고 가정해 봅시다.

<students>
    <student>
        <id>1</id>
        <name>John</name>
    </student>
    <student>
        <id>2</id>
        <name>Amy</name>
    </student>
    <student>
        <id>1</id>
        <name>John</name>
    </student>
</students>

위의 XML 파일에서 <student> 요소 중에서 중복된 내용을 제거해야 합니다.

아래는 Java를 사용하여 XML을 파싱하고 중복된 요소를 제거하는 예제 코드입니다.

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class RemoveDuplicateElements {
    public static void main(String[] args) throws Exception {
        String xml = "<students><student><id>1</id><name>John</name></student><student><id>2</id><name>Amy</name></student><student><id>1</id><name>John</name></student></students>";
        
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new InputSource(new StringReader(xml)));

        NodeList studentNodes = document.getElementsByTagName("student");

        for (int i = 0; i < studentNodes.getLength(); i++) {
            Node currentNode = studentNodes.item(i);
            String id = currentNode.getChildNodes().item(1).getTextContent();
            String name = currentNode.getChildNodes().item(3).getTextContent();

            for (int j = i + 1; j < studentNodes.getLength(); j++) {
                Node nextNode = studentNodes.item(j);
                if (id.equals(nextNode.getChildNodes().item(1).getTextContent()) && name.equals(nextNode.getChildNodes().item(3).getTextContent())) {
                    nextNode.getParentNode().removeChild(nextNode);
                }
            }
        }

        // 중복이 제거된 XML 출력
        System.out.println(toString(document));
    }

    public static String toString(Document document) {
        // TODO: Document 객체를 문자열로 변환하여 반환하는 코드 구현
        return null;
    }
}

위의 코드는 DOM을 사용하여 XML을 파싱하고 중복된 요소를 제거하는 기본적인 방법을 보여주고 있습니다. 필요한 경우 Document 객체를 문자열로 변환하는 코드를 추가하여 최종적으로 중복이 제거된 XML을 얻을 수 있습니다.

참고문헌: