从 Java 中的 XML 中去除空格和换行符

新手上路,请多包涵

使用 Java,我想获取以下格式的文档:

 <tag1>
 <tag2>
    <![CDATA[  Some data ]]>
 </tag2>
</tag1>

并将其转换为:

 <tag1><tag2><![CDATA[  Some data ]]></tag2></tag1>

我尝试了以下方法,但没有给我预期的结果:

 DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
dbfac.setIgnoringElementContentWhitespace(true);
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.parse(new FileInputStream("/tmp/test.xml"));

Writer out = new StringWriter();
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "no");
tf.transform(new DOMSource(doc), new StreamResult(out));
System.out.println(out.toString());

原文由 Jannis Ioannou 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

按照@Luiggi Mendoza 的问题评论中的说明进行工作解决方案。

 public static String trim(String input) {
    BufferedReader reader = new BufferedReader(new StringReader(input));
    StringBuffer result = new StringBuffer();
    try {
        String line;
        while ( (line = reader.readLine() ) != null)
            result.append(line.trim());
        return result.toString();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

原文由 Wolfgang 发布,翻译遵循 CC BY-SA 3.0 许可协议

递归遍历文档。删除任何包含空白内容的文本节点。修剪任何具有非空白内容的文本节点。

 public static void trimWhitespace(Node node)
{
    NodeList children = node.getChildNodes();
    for(int i = 0; i < children.getLength(); ++i) {
        Node child = children.item(i);
        if(child.getNodeType() == Node.TEXT_NODE) {
            child.setTextContent(child.getTextContent().trim());
        }
        trimWhitespace(child);
    }
}

原文由 jtahlborn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题