Java DocumentBuilder-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>

我尝试使用DocumentBuilder用Java编写一个简单的XML文件。 我希望XML文件如下所示:

<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);
}