25

StAX(特にwoodstox)を使用して、出力xmlを改行とタブでフォーマットすることは可能ですか?つまり、次の形式で:

<要素1>
  <要素2>
   一部のデータ
  </element2>
</element1>

それ以外の:

<element1><element2>someData</element2></element1>

これがwoodstoxで不可能な場合、これを行うことができる他の軽量ライブラリはありますか?

4

10 に答える 10

25

com.sun.xml.txw2.output.IndentingXMLStreamWriter があります

XMLOutputFactory xmlof = XMLOutputFactory.newInstance();
XMLStreamWriter writer = new IndentingXMLStreamWriter(xmlof.createXMLStreamWriter(out));
于 2010-09-02T08:29:01.693 に答える
7

JDKトランスフォーマーの使用:

public String transform(String xml) throws XMLStreamException, TransformerException
{
    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    Writer out = new StringWriter();
    t.transform(new StreamSource(new StringReader(xml)), new StreamResult(out));
    return out.toString();
}
于 2016-07-14T10:34:25.540 に答える
7

JDK 経由: transformer.setOutputProperty(OutputKeys.INDENT, "yes");.

于 2008-11-14T15:50:05.960 に答える
6

StAX カーソル API を使用している場合は、インデント プロキシで XMLStreamWriter をラップすることにより、出力をインデントできます。私は自分のプロジェクトでこれを試しましたが、うまくいきました。

于 2010-03-03T04:09:17.857 に答える
4

なくなる(またはcom.oracle ... classに名前が変更される)可能性のあるcom.sun ... classに依存するのではなく、java.netからStAXユーティリティクラスをダウンロードすることをお勧めします。このパッケージには、うまく機能するIndentingXMLStreamWriterクラスが含まれています。(ソースとjavadocはダウンロードに含まれています。)

于 2013-02-14T15:32:23.703 に答える
4

StaxMateはどうですか:

http://www.cowtowncoder.com/blog/archives/2006/09/entry_21.html

Woodstox、高速、低メモリ使用量 (メモリ内ツリーが構築されていない)、および次のようなインデントでうまく機能します。


SMOutputFactory sf = new SMOutputFactory(XMLOutputFactory.newInstance());
SMOutputDocument doc = sf.createOutputDocument(new FileOutputStream("output.xml"));
doc.setIndentation("\n ", 1, 2); // for unix linefeed, 2 spaces per level    
// write doc like:    
SMOutputElement root = doc.addElement("element1");    
root.addElement("element2").addCharacters("someData");    
doc.closeRoot(); // important, flushes, closes output

于 2009-01-27T20:40:01.910 に答える
1

Staxについてはわかりませんが、ここでxmlをきれいに印刷することについて最近議論がありました

Javaからxmlをきれいに印刷する

これは私の解決策でした

JavaからXMLをきれいに印刷するには?

org.dom4j.io.OutputFormat.createPrettyPrint()メソッドを使用する

于 2008-11-24T23:51:14.767 に答える
1

反復メソッド (XMLEventReader) を使用している場合、XML ファイルに書き込むときに、関連する XMLEvents に改行文字 '\n' を付けることはできませんか?

于 2008-11-14T15:49:12.933 に答える
0

Spring Batch では、このJIRA BATCH-1867以降、サブクラスが必要です。

public class IndentingStaxEventItemWriter<T> extends StaxEventItemWriter<T> {

  @Setter
  @Getter
  private boolean indenting = true;

  @Override
  protected XMLEventWriter createXmlEventWriter( XMLOutputFactory outputFactory, Writer writer) throws XMLStreamException {
    if ( isIndenting() ) {
      return new IndentingXMLEventWriter( super.createXmlEventWriter( outputFactory, writer ) );
    }
    else {
      return super.createXmlEventWriter( outputFactory, writer );
    }
  }

}

ただし、Spring Batch には StAX 出力をインデントするコードが含まれていないため、これには追加の依存関係が必要です。

<dependency>
  <groupId>net.java.dev.stax-utils</groupId>
  <artifactId>stax-utils</artifactId>
  <version>20070216</version>
</dependency>
于 2013-09-18T15:20:09.793 に答える