2012-01-19 4 views
0

형식 변환을 위해 xml 작성기를 사용하고 있습니다. 스트리밍 기능 (입력 파일이 상당히 커서 세그먼트별로 작성해야 함) 때문에 StAX API (정확한 커서 API)를 사용하기로 결정했습니다. 데이터 형식 (일부 클래스)을 사용하여 입력 파일의 구문 분석 된 값을 저장하고 있습니다. writeNode 메서드가있는 xml 파일 작성을위한 클래스도 만들었습니다. 이 메서드는 다음과 같습니다.Java에서 Stax를 사용할 때 빈 xml 노드 문제

public void writeNode(Object object){ 
writer.writeStartElement(); 
... some writeNode calls of the children nodes 
writer.writeEndElement(); 

} 

"writer"라는 이름의 개체는 StAXStreamWriter 클래스의 인스턴스입니다. 내 자식 노드가 비어있는 경우가 종종 있습니다. 이 경우 상위 노드는 전혀 쓰여져서는 안됩니다. 현재 노드의 시작 태그가 이미 작성 되었기 때문에 현재 빈 노드를 생성 중입니다. 내가 아는 한 이것은 되돌릴 수 없다. 이 문제를 해결하기위한 아이디어가 필요합니까?

안부

라스

업데이트 :

나는 생각한다, 나는 해결책을 발견했다. XMLStreamWriter 인터페이스를 구현하는 자체 클래스를 작성합니다. 이 클래스에서는 첫 번째 속성 또는 노드 값이 기록 될 때까지 시작 태그를 저장하기 위해 대기열 또는 목록 데이터 구조를 사용합니다.

업데이트 2 : 여기

내 솔루션의보다 정확한 설명입니다. 나는 새로운 표준 클래스를 표준 스트림 작성기 클래스로 감싸기 위해 데코레이터 디자인 패턴을 사용했다. 이 클래스에는 ArrayList가있어, WriteCharacter 메서드가 불려 갈 때까지 개시 태그가 포함됩니다.

답변

1

XML 파일로 이동할 때 xmlStreamReader.getEventType()까지 현재 이벤트를 가져올 수 있습니다. XMLStreamConstants.START_ELEMENT이 발생하면 삽입 순서 (예 : LinkedHashSet)를 유지하는 콜렉션에서 시작 태그 이름을 유지할 수 있습니다. 당신이 다음 XMLStreamConstants.CHARACTERS가 발생하는 경우

.getText()을하고 xmlStreamWriter에 이전에 저장된 태그를 쓸 수 있지만,이 텍스트가 비어 있지 않은 경우에만 (어쩌면 당신은 또한 .getText() -Result을 .trim() 할).

감사합니다. 최대