Каков самый короткий способ довольно распечатать организацию.консорциума W3C.дом.Документ в stdout?
каков самый простой способ красивой печати (он же форматированный) a org.w3c.dom.Document
в stdout?
6 ответов:
вызов
printDocument(doc, System.out)
, где этот метод выглядит так: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"))); }
(The
indent-amount
является необязательным, и может не работать с вашей конкретной конфигурации)
Как насчет:
OutputFormat format = new OutputFormat(doc); format.setIndenting(true); XMLSerializer serializer = new XMLSerializer(System.out, format); serializer.serialize(doc);
попробовать jcabi-xml С одним вкладышем:
String xml = new XMLDocument(document).toString();
это зависимость вам нужно:
<dependency> <groupId>com.jcabi</groupId> <artifactId>jcabi-xml</artifactId> <version>0.14</version> </dependency>
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 + " "); }
это вернет хорошо сформированные выходные данные с помощью рекурсивного спуска / подъема.
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); }