How to pretty print XML from Java?

后端 未结 30 2920
慢半拍i
慢半拍i 2020-11-22 01:55

I have a Java String that contains XML, with no line feeds or indentations. I would like to turn it into a String with nicely formatted XML. How do I do this?



        
30条回答
  •  执念已碎
    2020-11-22 02:55

    slightly improved version from milosmns...

    public static String getPrettyXml(String xml) {
        if (xml == null || xml.trim().length() == 0) return "";
    
        int stack = 0;
        StringBuilder pretty = new StringBuilder();
        String[] rows = xml.trim().replaceAll(">", ">\n").replaceAll("<", "\n<").split("\n");
    
        for (int i = 0; i < rows.length; i++) {
            if (rows[i] == null || rows[i].trim().length() == 0) continue;
    
            String row = rows[i].trim();
            if (row.startsWith("") == false) {
                String indent = repeatString(stack++);
                pretty.append(indent + row + "\n");
                if (row.endsWith("]]>")) stack--;
            } else {
                String indent = repeatString(stack);
                pretty.append(indent + row + "\n");
            }
        }
    
        return pretty.toString().trim();
    }
    
    private static String repeatString(int stack) {
         StringBuilder indent = new StringBuilder();
         for (int i = 0; i < stack; i++) {
            indent.append(" ");
         }
         return indent.toString();
    } 
    

提交回复
热议问题