2013-02-03 3 views
0

xml 문자열을 출력 스트림으로 보내는 응용 프로그램이 있습니다. 출력 스트림에 내용을 쓰기 전에 텍스트 노드의 내용 (노드 값의 내용)이 고정 길이를 초과하지 않는지 확인해야합니다. 이를 위해 컨텐츠 검증을 수행하는 데 도움이되는 텍스트 노드 컨텐츠를 얻기위한 샘플 코드를 작성했습니다. 하지만이 샘플 코드는 이클립스 프로파일 러 (TPTP)를 실행할 때 약 2 초가 걸리기 때문에 효과적이다. 성능을 향상시키기 위해이 작업을 수행하는 더 좋은 방법이 있는지 확인하고 싶습니다. 아래는 샘플 코드입니다.자바에서 문자열을 xml로 빠르게 변환

StringWriter stringWriter = new StringWriter(); 
    stringWriter.write("<node src='something'>nodetext goes here</node>"); 
    InputSource src = new InputSource(new StringReader(stringWriter.toString())); 
    try { 
     Element doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(src).getDocumentElement(); 
     System.out.println(doc.getChildNodes().getLength()); 
     Node n = doc.getChildNodes().item(0); 
     System.out.println(n.getNodeValue()); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

나노 파서 또는 Stax 나 SAX와 같은 다른 파싱 기술과 같은 다른 라이브러리를 탐색 해보십시오. 특정 기술을 가리킬 수 없습니다. 문제의 문맥이 여기에 주어지기 때문에 당신을 위해. – Prateek

답변

0

DOM 대신 SAX 구문 분석기를 사용하십시오. 예를 들어 this article을 참조하십시오.

1

DocumentBuilderFactory를 재사용하면 성능이 크게 향상됩니다. 즉, 클래스 패스 검색이 포함됩니다. DocumentBuilder를 재사용하면 아마도 도움이 될 것입니다. 그러나 XML을 문자열로 작성하고 구문 분석 한 다음 다시 분류하는 방식은 본질적으로 비효율적 인 것처럼 보이며 필요한 이유에 대한 설명을 실제로 이해하지 못했습니다.

+0

내 앱이 더 나은 접근 방식을 제안 할 수 있습니다. 내 웹 응용 프로그램은 브라우저에 XML 응답을 보냅니다. xml 태그의 텍스트 내용이 특정 길이를 초과하지 않도록 응답을 가로 챌 필요가 있습니다. 그 이유는 텍스트 내용을 잘라내 기 위해 xml 문자열을 구문 분석하려고하는 이유입니다. xml 문자열을 생성하는 메커니즘을 변경할 수 없습니다. 더 나은 접근법에 대해 생각해 볼 수 있습니까? –

+0

나는 "나는 X를 바꿀 수 없다"는 주장을 항상 의심 스럽다. 이런 종류의 주장은 소프트웨어의 구조적 붕괴로 이어집니다. 나는 가정에 도전 할 것이다. 그러나 그것은 나의 프로젝트가 아니다. –