Java实现XML格式化输出

这个是我在CSDN找到的一段XML格式化代码,但在XML包含版本编码的时候格式化第一个节点会走样,我稍微判断了一下。

 

public class XMLFormat {

 

    //格式化XML字符串

    public static String format(String originStr) {

        String XMLInfo = null;

        StringBuilder sb = new StringBuilder();

 

        try {

            if (originStr != null) {

                if (originStr.trim().startsWith("<?")) {

                    //包含XML版本编码

                    XMLInfo = originStr.trim().substring(0, originStr.trim().indexOf("?>") + 2);

                    originStr = originStr.trim().substring(originStr.trim().indexOf("?>") + 2, originStr.trim().length());

 

                }

                char[] charArray = originStr.toCharArray();

                int openCount = 0;

                int closeCount = 0;

                int lastNode = -1;//0 <> 1 </>

                for (int i = 0; i < charArray.length; i++) {

 

                    // < open and 换行

                    if (charArray[i] == '<' && i != charArray.length - 1 && charArray[i + 1] != '/' && charArray[i + 1] != '!') {

                        lastNode = 0;

                        enterAndTabs(sb, openCount - closeCount);

                        sb.append(charArray[i]);

                        openCount++;

                        continue;

                    }

                    // </ close and 换行

                    if (charArray[i] == '<' && i != charArray.length - 1 && charArray[i + 1] == '/') {

                        // 0 表示 开-闭 ,不换行

                        if (lastNode != 0) {

                            enterAndTabs(sb, openCount - closeCount - 1);

                        }

                        sb.append(charArray[i]).append(charArray[++i]);

                        closeCount++;

                        lastNode = 1;

                        continue;

                    }

                    // 自闭合

                    if (charArray[i] == '>' && i > 0 && charArray[i - 1] == '/') {

                        sb.append(charArray[i]);

                        closeCount++;

                        continue;

                    }

                    //反着来了

                    sb.append(charArray[i]);

                }

            }

        } catch (Exception exception) {

 

        }

        sb.insert(0,XMLInfo);

        return sb.toString();

    }

 

    /**

     * 回车与制表符

     *

     * @param sb StringBuilder

     * @param tabCount 多少个制表符

     */

    private static void enterAndTabs(StringBuilder sb, int tabCount) {

            sb.append("\n");

        while (tabCount-- > 0) {

                sb.append(" ");

            }

        }

 

    }

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值