... 어쨌든 작은 수 없습니다, 다른 한편으로는, 중요 할 수 있지만 것, 문제가있다 문서 직렬화 및 다시 구문 분석. 메모리 사용, 성능 고려 사항 및 정규화 외에도 프롤로그 (DTD 또는 스키마)의 손실, 캡처 될 필요가없는 주석 손실 가능성 및 중요한 공백이 될 수있는 손실이 발생합니다. 직렬화는 피해야합니다.
실제 목표가 기존 DOM Document 객체의 복사본을 만드는 것이면 프로그래밍 방식으로 메모리에서 처리해야합니다. 고맙게도 Java 5에서 사용할 수있는 기능을 사용하거나 패스 런스 변환 (pass-through transformation) 인 Xalan과 같은 외부 XSLT 라이브러리를 사용하여이 작업을 수행하는 상대적으로 쉬운 방법이 있습니다. 기본적으로의
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tx = tfactory.newTransformer();
DOMSource source = new DOMSource(doc);
DOMResult result = new DOMResult();
tx.transform(source,result);
return (Document)result.getNode();
: 아래
는 Java 5 솔루션을 표시됩니다. 예외를 처리해야하며 변환기를 구성하고자 할 수도 있지만 독자의 연습 문제로 남겨 둡니다.
이것은 고안된 예이지만 문서를 직렬화하면 정규화됩니다. (인접한 텍스트 노드가 결합됩니다.) 이 특별한 경우의 메모리 소비는 문제가되지 않습니다. –
실제로 더 나은 예는 인라인 DTD가있는 문서입니다. no-op 변환기를 사용하여 DOM을 직렬화하면 DTD가 사라집니다. 물론, DOM을 직렬화하는 더 좋은 방법이 있다면, 나는 모든 귀입니다. –