반응형
org.w3c.dom.Document를 stdout에 예쁜 인쇄하는 가장 짧은 방법은 무엇입니까?
org.w3c.dom.Document
stdout 에 예쁜 인쇄 (일명 형식화)하는 가장 쉬운 방법은 무엇입니까 ?
전화 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")));
}
( 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);
}
dom4j를 사용하면 dom4JDOM.asString ()
반응형
'code' 카테고리의 다른 글
토글 버튼은 어떻게 만듭니 까? (0) | 2020.08.28 |
---|---|
ContextMenu를 표시하기 전에 오른쪽 클릭에서 TreeView 노드를 선택 (0) | 2020.08.28 |
Python의 생성기 함수에서 한 번에 하나의 값을 얻는 방법은 무엇입니까? (0) | 2020.08.28 |
git update-index --assume-unchanged on directory (0) | 2020.08.28 |
SQL로 카운터를 실행할 때 "갭"을 어떻게 찾습니까? (0) | 2020.08.28 |