2010-07-14 5 views
0

Staxmate API를 사용하여 XML 파일을 생성하고 있습니다. 튜토리얼을 읽은 후 : http://staxmate.codehaus.org/Tutorial 나는 내 코드를 변경하려고 시도했다. 마침내 전화를 걸었습니다Staxmate API의 들여 쓰기 문제

doc.setIndentation("\n ", 1, 1); 

새로 생성 된 XML 파일이 비어있게되었습니다! 이 메소드 호출이 없으면 전체 XML 파일이 예상대로 생성됩니다. 문제가 계속 반면 계속 내 코드에서 main(String) 메소드를 호출 할 때 지금

package ch.synlogic.iaf.export; 

import java.io.File; 

import javax.xml.stream.XMLOutputFactory; 
import javax.xml.stream.XMLStreamException; 

import org.codehaus.staxmate.SMOutputFactory; 
import org.codehaus.staxmate.out.SMOutputDocument; 
import org.codehaus.staxmate.out.SMOutputElement; 

public class Test { 

public static void main(String[] args) { 
main("c:\\tmp\\empl.xml"); 
} 

public static void main(String fname) 
{ 
// 1: need output factory 
SMOutputFactory outf = new SMOutputFactory(XMLOutputFactory.newInstance()); 
SMOutputDocument doc; 
try { 
    doc = outf.createOutputDocument(new File(fname)); 

// (optional) 3: enable indentation (note spaces after backslash!) 
doc.setIndentation("\n ", 1, 1); 
// 4. comment regarding generation time 
doc.addComment(" generated: "+new java.util.Date().toString()); 
SMOutputElement empl = doc.addElement("employee"); 
empl.addAttribute(/*namespace*/ null, "id", 123); 
SMOutputElement name = empl.addElement("name"); 
name.addElement("first").addCharacters("Tatu"); 
name.addElement("last").addCharacters("Saloranta"); 
// 10. close the document to close elements, flush output 
doc.closeRoot(); 
} catch (XMLStreamException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
} 

: 프로젝트 설정에서에서 비린내가 뭔가 의심

, 나는 튜토리얼에 주어진 코드와 같은 패키지에 테스트 클래스를 생성 클래스 테스트를 실행하면 원활하게 작동합니다! 내 코드에는 데이터베이스 초기화 및 기타 제품 별 작업이 포함됩니다.

나는 어떻게 되느냐에 관한 생각을 잃었습니다. ("\ 연구 \ n을 \ t \ t \ t \ t \ t \ t \ t \ t", 2 context.setIndentation -

답변

1

들여 쓰기

다음
WstxOutputFactory factory = new WstxOutputFactory(); 
factory.setProperty(WstxOutputFactory.P_AUTOMATIC_EMPTY_ELEMENTS, true); 
SMOutputFactory outf = new SMOutputFactory(factory); 
doc = outf.createOutputDocument(fout); 
doc.setIndentation("\n ", 1, 1); 
+0

빠른 질문 : 처음에 어떤 구현을 사용 했습니까? JDK 1.6과 함께 제공되는 Sun의 Stax 구현은 무엇입니까? StaxMate는 대부분 Woodstox를 사용하여 테스트되었으므로이 두 가지의 상호 작용에 버그가있을 수 있습니다 (수동으로도 테스트 할 수 있습니다.) – StaxMan

+0

Btw : 내 생각에 Stax 문제의 구현은 기본 File (또는 FileOutputStream)을 플러시하거나 닫지 않습니다. Stax API는 streamWriter.close()가 어떤 문제를 일으키는 지에 대한 약간 이상한 정의를 가지고 있습니다. FileOutputStream을 전달하고 나중에 명시 적으로 닫는 것이 가장 효과적 일 수 있습니다. 그러나 내가 아는 한, Woodstox는이 사건을 예상대로 처리 할 것입니다. – StaxMan

+0

최신 정보를 알려 주셔서 사과드립니다. 처음에는 어떤 jar 파일을 사용했는지 잊어서 정보를 잃어 버렸습니다. 나는 아마도 당신이 옳다고 생각합니다. – thequark

1

나를 위해 작동 Woodstox의 API와 함께 작동 , 1); // 레벨에 따라 창 lf 및 탭 하나씩 들여 쓰기