2011-11-30 1 views
11

org.w3c.dom.Document를 java.lang.String으로 변환해야합니다. 두 가지 가능한 접근법을 발견했습니다. 하나는 org.w3c.dom.ls.LSSerializer를 사용하고 다른 하나는 javax.xml.transform.Transformer를 사용합니다. 각 샘플을 아래에 있습니다.LSSerializer와 xml을 String으로 직렬화하기위한 Transformer

어떤 방법을 선호하는지 알 수 있습니까?

public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) { 
    DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance(); 
    DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS"); 
    LSSerializer serializer = impl.createLSSerializer(); 
    return serializer.writeToString(doc); 
} 

public String docToStringUsingTransformer(org.w3c.dom.Document doc) { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    StringWriter stw = new StringWriter(); 
    transformer.transform(new DOMSource(doc), new StreamResult(stw)); 
    return stw.toString(); 
} 
+0

당신이 지금 혹시 답을 발견했다? 나는 나 자신과 같은 질문을 궁금해했다. – apines

+0

나는 어떤 대답도 얻지 못했고 어떤 것을 선호하는 기사를 찾을 수 없었다. 그러나 거의 모든 기사와 게시물은 String을 직렬화 할 때 javax.xml.Transform을 사용하므로 전체적으로 선호되는 방식 인 것으로 보입니다. 그럼에도 불구하고 나는 org.w3c.dom.ls.LSSerializer와 함께 갔고, 그것을 줄만한 확실한 이유가 없다. 나는 "One Stop Shopping"의 느낌을 좋아한다. org.w3c.dom 패키지를 사용한다. 지금까지이 메서드를 사용하여보고 할 부정적인 점은 없습니다. 그래서 내 대답은 "둘 다 괜찮아 보인다"라고 생각합니다. –

답변

4

몇 가지 포인트를 고려하는 것이 있습니다

  1. LSSerializer에은 일반적으로보다 빠른 변압기 간주됩니다.
  2. 그럼에도 불구하고 크게 구현에 따라 다릅니다. A SAX 기반의 변압기은 성능이 좋습니다. 그리고 다른 구현 자 (Xalan, Xerces, ...)가 있습니다.
  3. 시스템에서 어떤 것이 더 좋은지 쉽게 확인할 수 있습니다. 복잡한 XML로 간단한 테스트 케이스를 디자인하십시오. 시간의 루프 thousdns에서 그것을 실행 시간 확인 (Syste.getCurrentMilliseconds 또는 뭔가)와 함께 포장하고 당신은 자신에게 대답을했습니다.
  4. 다른 좋은 답변은 다음과 같습니다
+0

조명 해 주셔서 감사합니다. 필자가 우려하는 또 다른 문제는 라이브러리 또는 API 작성자가이를 포기할 수있는 가능성 인 "포기 가능성 (Abandonment Likelihood)"이며, 기본 기술 (이 경우 JDK)이 변경되면 더 이상 업데이트를 제공하지 않을 수도 있습니다. 버려지거나 더 이상 사용되지 않을 가능성이 더 높다고 생각하십니까? 감사 –

관련 문제