ちょっと苦しいですが標準機能だけで整形できます〜
tree-tipsで色々な整形サービスを作ろうと思って色々調べているうち、javaの標準機能でxmlを整形するサンプルが出来てしまったので公開します。
xmlファイルから読み込むとテストしにくいので、文字列を引数に渡せるようにしています。
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; public class XmlFormatter { public static void main(String[] args) { String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><elm1 attr1=\"attr1\"><elm2 attr2=\"attr2\"><elm3>elm3</elm3><elm4 /></elm2></elm1></root>"; InputStream in = null; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); in = new ByteArrayInputStream(xmlStr.getBytes()); Document doc = builder.parse(in); Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.setOutputProperty(OutputKeys.METHOD, "xml"); tf.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4"); StringWriter sw = new StringWriter(); tf.transform(new DOMSource(doc), new StreamResult(sw)); System.out.println(sw.toString()); } catch (Exception e) { e.printStackTrace(); } finally { try { if (in != null) in.close(); } catch (IOException e) { } } } }
この結果は以下になります。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <elm1 attr1="attr1"> <elm2 attr2="attr2"> <elm3>elm3</elm3> <elm4/> </elm2> </elm1> </root>
インデント数の部分は「indent-amount」の「4」の部分をいじって下さい。
これで実現はできたのですが、1点問題が・・・
standalone="no"がどうしても追加されてしまうのです・・・
つかない方法を探していますが、まだ見つかっていません。。。
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/20
- メディア: 大型本
- この商品を含むブログ (2件) を見る
はじめてのANDROIDアプリ作成 JAVA入門 (はじめてのAndroidアプリ作成 シリーズ)
- 作者: 末次 章
- 出版社/メーカー: 日経BP社
- 発売日: 2012/02/23
- メディア: 単行本
- 購入: 1人 クリック: 15回
- この商品を含むブログ (2件) を見る