Java DocumentBuilder-XML文件中的缩进错误
我尝试使用DocumentBuilder用Java编写一个简单的XML文件。 我希望XML文件如下所示:Java DocumentBuilder-XML文件中的缩进错误,java,xml,indentation,domparser,Java,Xml,Indentation,Domparser,我尝试使用DocumentBuilder用Java编写一个简单的XML文件。 我希望XML文件如下所示: <outer> <inner> <element name="WEB"/> <element name="WEB"/> <element name="WEB"/> </inner> </outer> <outer>
<outer>
<inner>
<element name="WEB"/>
<element name="WEB"/>
<element name="WEB"/>
</inner>
</outer>
<outer>
<inner>
<element name="WEB"/>
<element name="WEB"/>
<element name="WEB"/>
</inner>
</outer>
xmlfile中用于标识的文本节点被视为数据。正因为如此,你的缩进将被抛到一边。您可以按以下方式修复此问题:
private static void removeEmptyText(Node node){
Node child = node.getFirstChild();
while(child!=null){
Node sibling = child.getNextSibling();
if(child.getNodeType()==Node.TEXT_NODE){
if(child.getTextContent().trim().isEmpty())
node.removeChild(child);
}else
removeEmptyText(child);
child = sibling;
}
}
private static void write(Document document) throws TransformerException {
removeEmptyText(document.getDocumentElement());
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(FILEPATH));
transformer.transform(source, result);
}
在这里,我将在写入文件之前从dom中删除所有缩进文本节点。您没有使用dom解析器。您正在使用DocumentBuilder。您前面提到的问题没有意义,因为DOM解析器不创建XML文件,也不关心缩进。谢谢您的澄清!我现在改正了,谢谢!工作起来很有魅力!
private static void removeEmptyText(Node node){
Node child = node.getFirstChild();
while(child!=null){
Node sibling = child.getNextSibling();
if(child.getNodeType()==Node.TEXT_NODE){
if(child.getTextContent().trim().isEmpty())
node.removeChild(child);
}else
removeEmptyText(child);
child = sibling;
}
}
private static void write(Document document) throws TransformerException {
removeEmptyText(document.getDocumentElement());
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(FILEPATH));
transformer.transform(source, result);
}