0

ここ StackOverflow のいくつかの例に基づいて、XML をインデントするための次のコードがあります。.xml にソース xml ファイルがありStringます。ただし、出力はインデントされていませんが、エラーも発生しません。出力はデバッガーでチェックされ、誤ってレンダリングされて見落とされる可能性のあるスペースやタブなどの文字は含まれていません。

String input = "xmldata";
Source xmlInput = new StreamSource(new StringReader(input));

StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(xmlInput, xmlOutput);
return stringWriter.toString();

にも設定しようとしindent-amountまし"2"たが、アプリは不明な属性について不平を言います。おそらくこれは Android には実装されていません。

ここで何か間違ったことをしていますか?ソース xml 文字列からインデントされた xml ファイルを生成するための他のオプションはありますか?

4

1 に答える 1

0

次のようなことを試すことができます:

String input = "xmldata";
InputSource is = new InputSource(new StringReader(input));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc = dbf.newDocumentBuilder().parse(is);
System.out.println(prettyPrint(doc));

public static final String prettyPrint(Node xml) throws TransformerConfigurationException, TransformerFactoryConfigurationError, TransformerException {
    StringWriter stringWriter = new StringWriter();
    StreamResult out = new StreamResult(stringWriter);

    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    tf.transform(new DOMSource(xml), out);
    return out.getWriter().toString();
}
于 2013-04-09T17:57:25.783 に答える