2014-12-15 5 views
0

XML을 생성하는 프로세스를 만들고 (내가 미리 알지 못하는 다양한 소스와 다양한 목적으로) 결과 XML을 표준 XML로 직접 보내고 싶습니다. SAX, StAX 및 DOM과 같은 처리 나는 이미 XML 파일을 생성하고 StAX 프로세스가 파일을 읽는 StAX 구현을 수행했다. 하지만 중간 파일 생성을 건너 뛰고 읽고 싶습니다. 푸시 파서가 작업에 적합하기 때문에 SAX가 올바른 선택 인 것 같습니다. 사용 가능한 XML을 처리합니다.JAX 문자열을 SAX에 전달

하나의 Java 구성 요소에서 문자열을 SAX 파서 프로세스로 전달하는 방법을 설정하는 방법은별로 없습니다. 대부분의 예제에서는 파일을 읽었으며 일부는 URLConnection을 사용하여 서비스 유형 응용 프로그램을 지원합니다. 이 경우 소스는 동일한 시스템의 일부인 다른 Java 구성 요소입니다.

답변

1

sax 파서는 Reader을 기반으로 InputSource에서 읽을 수 있습니다. 문자열을 입력하려면 StringReader에 문자열을 입력하십시오.

과 같이 보일 것이다 구문 분석하는 코드 : 내가 보여 성가 시게하지 않은 것으로 처리 과정의 일부를 제외하고

XMLReader xmlReader = SAXParserFactory.newInstance() 
          .newSAXParser().getXMLReader(); 
    //Attach content handler, etc... 
    InputSource source = new InputSource(new StringReader(xml_string)); 
    xmlReader.parse(source); 

합니다.

StringReader의 연결 세부 정보가 다르긴하지만 StAX와 DOM에서도 동일한 작업을 수행 할 수 있습니다.

+0

나는 그것이 작동 할 것 같아요. (며칠 동안 집에 가려고하지는 않습니다.) 그러나 내가 통과 할 때 모든 라인이나 요소에 대해 새로운 StringReader와 InputSource를 만드는 것은 이상한 것 같습니다. 파일의 끝 부분을 먼저 수집하여 보내지 않는 한 DOM에 실제 문제가있는 것 같습니다. InputSource는 바이트 또는 문자열을 취할 수도 있습니다. 나는 systemId를 어떻게 사용하는지 전혀 모른다. –

+0

'InputSource' (와 SAX)가 읽는'PipedReader'에 첨부 된'PipedWriter'에 문자열을 쓸 수도 있습니다. –

+0

확인. 나는 별도의 스레드에서 입력 소스를 사용하여 해당 작업을 수행했습니다. 그것은 꽤 잘 작동하는 것 같습니다. 내가 아는 한 모두를위한 최상의 솔루션입니다. 나는 가장 간단하고 최상 (가장 빠름)을 찾기를 정말로 좋아하며 여분의 스레드를 사용하는 것이 어떤면에서는 과도하지 않다는 것을 완전히 확신하지 못한다. 그러나 그것은 빠르며 거기에는 많은 코드가 없습니다. 간단한 테스트에서 꽤 잘 작동합니다. –