En utilisant le code simple suivant :
package test;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
public class TestOutputKeys {
public static void main(String[] args) throws TransformerException {
// Instantiate transformer input
Source xmlInput = new StreamSource(new StringReader(
"<!-- Document comment --><aaa><bbb/><ccc/></aaa>"));
StreamResult xmlOutput = new StreamResult(new StringWriter());
// Configure transformer
Transformer transformer = TransformerFactory.newInstance()
.newTransformer(); // An identity transformer
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "testing.dtd");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);
System.out.println(xmlOutput.getWriter().toString());
}
}
J'obtiens le résultat :
<?xml version="1.0" encoding="UTF-8"?>
<!-- Document comment --><!DOCTYPE aaa SYSTEM "testing.dtd">
<aaa>
<bbb/>
<ccc/>
</aaa>
Question A : La balise doctype apparaît après le commentaire du document. Est-il possible de la faire apparaître avant le commentaire du document ?
Question B : Comment réaliser l'indentation, en utilisant uniquement l'API JavaSE 5.0 ? Cette question est essentiellement identique à Comment imprimer un fichier xml à partir de Java ? , cependant presque toutes les réponses à cette question dépendent de bibliothèques externes. La seule réponse applicable (postée par un utilisateur nommé Lorenzo Boccaccia) qui n'utilise que l'API de Java, est fondamentalement égale au code posté ci-dessus, mais ne fonctionne pas pour moi (comme le montre la sortie, je n'obtiens aucune indentation).
Je suppose que vous devez définir le nombre d'espaces à utiliser pour l'indentation, comme le font de nombreuses réponses avec des bibliothèques externes, mais je ne trouve pas où spécifier cela dans l'API Java. Étant donné que la possibilité de définir une propriété d'indentation sur "oui" existe dans l'API java, il doit être possible d'effectuer l'indentation d'une manière ou d'une autre. Mais je n'arrive pas à trouver comment.