¿Cuál es la forma más sencilla de imprimir bastante (a.k.a formateado) a org.w3c.dom.Document
en stdout?¿Cuál es la forma más corta de imprimir bastante un org.w3c.dom.Document a stdout?
Respuesta
llamada printDocument(doc, System.out)
, donde ese método es el siguiente:
public static void printDocument(Document doc, OutputStream out) throws IOException, TransformerException {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.transform(new DOMSource(doc),
new StreamResult(new OutputStreamWriter(out, "UTF-8")));
}
(El indent-amount
es opcional, y podría no funcionar con su configuración particular)
¿Qué tal:
OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);
XMLSerializer serializer = new XMLSerializer(System.out, format);
serializer.serialize(doc);
Aunque es más fácil, este enfoque requiere Xerces – Pace
private void printNode(Node rootNode, String spacer) {
System.out.println(spacer + rootNode.getNodeName() + " -> " + rootNode.getNodeValue());
NodeList nl = rootNode.getChildNodes();
for (int i = 0; i < nl.getLength(); i++)
printNode(nl.item(i), spacer + " ");
}
. Agradezco que la Q solicite la más corta, pero (para el beneficio de cualquier otra persona) quizás pueda elaborar su respuesta a explicar lo que está pasando? – Andrew
Pruebe jcabi-xml con un trazador de líneas:
String xml = new XMLDocument(document).toString();
Esta es la dependencia que necesita:
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-xml</artifactId>
<version>0.14</version>
</dependency>
Esto devolverá una salida muy bien formateado mediante el uso recursivo de descenso/ascenso.
private static boolean skipNL;
private static String printXML(Node rootNode) {
String tab = "";
skipNL = false;
return(printXML(rootNode, tab));
}
private static String printXML(Node rootNode, String tab) {
String print = "";
if(rootNode.getNodeType()==Node.ELEMENT_NODE) {
print += "\n"+tab+"<"+rootNode.getNodeName()+">";
}
NodeList nl = rootNode.getChildNodes();
if(nl.getLength()>0) {
for (int i = 0; i < nl.getLength(); i++) {
print += printXML(nl.item(i), tab+" "); // \t
}
} else {
if(rootNode.getNodeValue()!=null) {
print = rootNode.getNodeValue();
}
skipNL = true;
}
if(rootNode.getNodeType()==Node.ELEMENT_NODE) {
if(!skipNL) {
print += "\n"+tab;
}
skipNL = false;
print += "</"+rootNode.getNodeName()+">";
}
return(print);
}
Esto es muy incompleto. – Andrew
si utiliza dom4j, sería dom4JDOM.asString()
- 1. ¿Cuál es la forma más corta de contar la cantidad de elementos en un generador/iterador?
- 2. Forma más corta de imprimir el año actual en Javascript
- 3. IOS - XML Imprimir Bastante
- 4. ¿Cuál es la forma más corta/más idiomática de determinar si una variable es cualquiera de una lista de valores?
- 5. ¿Cuál es la forma más corta de implementar una clase proxy o decorador en C#?
- 6. ¿Cuál es la forma más corta de intercambiar cambios por etapas y sin escena en git?
- 7. ¿Cuál es la forma más corta de generar una dirección IP aleatoria en Ruby?
- 8. ¿Es posible imprimir bastante JSON en Grails 1.3.7?
- 9. ¿Cuál es la forma más simple de usar SSH Python?
- 10. ¿Cuál es la mejor forma de generar una cadena de hash corta a partir de una cadena más larga?
- 11. ¿Cuál es la forma más eficiente de ordenar un NSSet?
- 12. ¿Cuál es la forma más fácil de imprimir texto en pantalla en OpenGL?
- 13. ¿Calcula la forma más corta de rotar, derecha o izquierda?
- 14. ¿Puedo imprimir bastante la salida DBIC_TRACE en DBIx :: Class?
- 15. ¿Cuál es la forma más corta de delegar métodos no implementados en un objeto contenido en Java?
- 16. forma más corta de escribir jQuery $ (document) La función ready
- 17. Scala: Convert org.w3c.dom.Document a scala.xml.NodeSeq
- 18. ¿Hay alguna manera de imprimir bastante un certificado X509?
- 19. ¿Cuál es la forma más simple de crear un iterable vacío usando rendimiento en Python?
- 20. ¿Cuál es la forma más eficiente de copiar de forma masiva a SQL Server desde Java?
- 21. ¿Cuál es la forma más rápida de saltar a un constructor (es) en una clase?
- 22. ¿Cuál es el camino más rápido para encontrar la distancia más corta entre dos cartesiano polígonos
- 23. Bastante imprimir una tabla en C++
- 24. Cómo imprimir bastante el código VBA?
- 25. ¿cuál es una forma más bonita de imprimir información con R?
- 26. ¿Cuál es la forma más eficiente de agregar un reflejo a un UIImageView
- 27. ¿Cuál es la forma más sencilla de conectar un dispositivo a un iPad desde una aplicación?
- 28. más corta Rubí Quine
- 29. ¿Cuál es la forma más fácil de animar una línea?
- 30. WPF: ¿cuál es la forma más eficiente/rápida de agregar elementos a un ListView?
¿No es irónico que esa es la forma "más fácil" para imprimir sólo un documento XML en Java? – Thomas
; por otro lado, tiene mucho control;) – Bozho
Brilliant! Y sí, es un poco texto, pero está claro cuáles son las opciones seleccionadas y Eclipse/Netbeans realmente lo ayudan a escribir esto. Muéstrame una versión más pequeña y te digo lo que no puede hacer. Peor aún, le diré dónde necesita 3 rondas de depuración para hacerlo bien ... –