Clean Code that Works.

어쩌다 보니 간단한 XML 에디터 까지 개발해야 해서...
완전 삽질중. -_-;;
작년 9월부터 시작한걸 아직까지 잡고 있다.
뭐 중간에 캐나다고 갔다오고.. 하기 싫어서 다른 책도 보고 했지만..
이제 슬슬 끝이 보인듯 싶다. 역시 GUI는 번거롭다.

여튼 각설하고 XPATH로 원하는 노드를 찾은 후 XML 문서에 저장 하는 방법을 알아보자.

일단 처음엔 XPATH를 사용해야하기 때문에 XPathFactory 로 새 인스턴스를 만든 후, XPath도 새로 만들어 준다.

XPathFactory xpathFactory = XPathFactory.newInstance();
xpath = xpathFactory.newXPath();
xmlSource = new InputSource(Main.TESTSOURCE);
// 인풋 소스는 해당 xml 파일.

이렇게 해서 각각 인스턴스들을 만든후.
xpath 검색을 해서 엘리먼트에 할당한 다음에
이 엘리먼트에서 수정을 한 후.

Element element = (Element) xpath.evaluate(path, xmlSource, XPathConstants.NODE);
//xpath를 사용해서 검색.
Element root = (Element) element.getParentNode().getParentNode()
    .getParentNode().getParentNode();
//루트는 새로 문서를 저장할 때 필요하기 때문에 필요하다. 나 같은 경우에는 xpath를 사용해서 검색한 깊이가 4단계 이기 때문에 4번째 위의 부모 노드가 루트 노드이다.
Element feature = (Element) element.getChildNodes().item(3);
feature.setTextContent("원하는 데이터");
//해당 노드를 얻어 와서 setTextContent를 사용해서 값을 할당


이렇게 하면 일단 메모리에 올라와 있는 element 들은 다 수정이 되어 있다.
그 다음에는 TransformerFactory 를 사용해서 문서를 다시 저장해 주어야 한다.

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
DOMSource source = new DOMSource(root);
StreamResult result = new StreamResult(new File(Main.TESTSOURCE));
transformer.transform(source, result);


DOM 객체를 수정, 추가, 제거하는 것은 모두 메모리상에서 이루어지고 이것을 영구 보본하기 위해서는 파일의 형태로 XML 문서로 저장해야 한다.

다양한 방법으로 문서를 저장 할 수 있지만 위의 방법은 XSLT변환기를 사용하여 파일로 저장한다.