문제

현재 XML 파일을 읽고 약간의 변경(일부 속성 값 변경)을 한 다음 다시 작성하려고 합니다.

저는 StAX 파서를 사용하려고 했습니다(javax.xml.stream.XMLStreamReader) 각 이벤트를 읽고 변경하고 싶은 이벤트인지 확인한 다음 StAX 작성자에게 바로 전달합니다(javax.xml.stream.XMLStreamReader) 변경이 필요하지 않은 경우.

불행하게도 그렇게 단순해 보이지는 않습니다. 작성자는 이벤트 유형과 파서 객체를 가져올 수 있는 방법이 없으며 다음과 같은 메서드만 사용할 수 있습니다. writeAttribute 그리고 writeStartElement.분명히 XML 문서에서 발생할 수 있는 모든 가능한 유형의 요소에 대한 사례가 포함된 큰 스위치 문을 작성하고 다시 작성할 수 있지만 단순해야 할 것처럼 보이는 작업에는 많은 문제가 있는 것 같습니다. .

StAX로 읽은 것과 매우 유사한 XML 문서를 쉽게 작성할 수 있게 해주는 뭔가가 빠졌나요?

도움이 되었습니까?

해결책

StAX는 꽤 잘 작동하고 매우 빠릅니다.최대 20MB의 XML 파일을 구문 분석하는 프로젝트에서 이를 사용했습니다.철저한 분석은 아니지만 확실히 SAX보다 빨랐습니다.

귀하의 질문에 관해서는:스트리밍과 이벤트 처리의 차이점인 AFAIK는 제어입니다.스트리밍 API를 사용하면 문서를 단계별로 살펴보고 원하는 콘텐츠를 얻을 수 있습니다.반면 이벤트 기반 API는 관심 있는 것만 처리할 수 있습니다.

다른 팁

약간의 고민 끝에 Stream 버전보다는 Event 리더/라이터 버전을 사용하는 것이 답인 것 같습니다.

(즉.javax.xml.stream.XMLEventReader 및 javax.xml.stream.XMLEventWriter)

또한보십시오 http://www.devx.com/tips/Tip/37795, 그것이 마침내 나를 움직이게 만들었습니다.

나는 이것이 다소 오래된 질문이라는 것을 알고 있지만 다른 사람이 이와 같은 것을 찾고 있다면 또 다른 대안이 있습니다.Woodstox Stax2 확장 API에는 다음 방법이 있습니다.

XMLStreamWriter2.copyEventFromReader(XMLStreamReader2 r, boolean preserveEventData) 

스트림 기록기를 사용하여 스트림 판독기에서 현재 가리키는 이벤트를 복사합니다.이는 간단할 뿐만 아니라 매우 효율적입니다.나는 비슷한 수정을 위해 그것을 성공적으로 사용했습니다.

(XMLStreamWriter2 등을 얻는 방법은 무엇입니까?Woodstox에서 제공하는 모든 인스턴스는 이러한 확장 버전을 구현합니다. 또한 누군가가 "기본" Stax 변형을 사용하려는 경우를 위한 래퍼도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top