0

Staxmate API を使用して XML ファイルを生成しています。チュートリアルを読んだ後: http://staxmate.codehaus.org/Tutorialコードを変更してみました。最後に私は呼び出しを追加しました

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

これにより、新しく生成された XML ファイルが空になります。このメソッドを呼び出さないと、XML ファイル全体が期待どおりに生成されます。

プロジェクトのセットアップで怪しいものを疑って、チュートリアルで指定されたコードを使用して、同じパッケージに Test クラスを作成しました。

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();
 }
}
}

コードからメソッドを呼び出してmain(String)も問題は解決しませんが、クラス Test をそのまま実行するとスムーズに動作します。私のコードには、データベースの初期化とその他の製品固有のアクションが含まれています。

道に迷っています。これをどのように進めるべきかについて何か考えはありますか?

4

2 に答える 2

1

インデントは Woodstox API で動作します

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);
于 2010-07-14T16:49:25.870 に答える
1

以下は私のために働きます - context.setIndentation("\r\n\t\t\t\t\t\t\t\t", 2, 1); // Windows lf とレベルごとに 1 つのタブでインデント

于 2012-01-20T09:41:12.037 に答える