Java 格式化xml字符串

Java 格式化xml字符串


基础思路

xml格式报文采用标签对的形式来表示,通常的结构为value,其中,value值可以为嵌套的xml报文。
先假设这样一个xml字符串:

<xml><a>1</a><b><c>2</c></b><d>3</d></xml>

格式化后的样式为:

<xml>
    <a>1</a>
    <b>
        <c>2</c>
    </b>
    <d>3</d>
</xml>

本文的解决思路为:

  • 读取xml报文的第一个标签,读取这个标签的内容,记作inside,和这个标签外的报文记作outside。
  • 依次对inside和outside作为xml报文对其进行步骤1的处理。如果检测到inside不是xml报文或outside为空,则不做处理。

代码实现

主体代码:

private static String formatXml(String message, int depth) {
    String format = ""; //格式化的xml报文
    String firstTag = getFirstTag(message);
    String inside = getInsideContent(firstTag, message);
    String outside = getOutsideContent(firstTag, message);

    String insideTag = getFirstTag(inside); //根据是否含有第一个标签来获取字符串是否是xml报文格式,这个的判断逻辑并不严谨
    //对于inside是xml报文的情况下,当前标签的结束标记需要另起一行
    if (insideTag == null) {
        format = "\r\n" + indent(depth) + "<" 
            + firstTag + ">" + inside + "</" + firstTag + ">";
    } else {
        format = "\r\n" + indent(depth) + "<" 
            + firstTag + ">" + formatXml(inside, depth + 1)
            + indent(depth) + "</" + firstTag + ">";
    }
    String outsideTag = getFirstTag(outside);
    if (outsideTag != null) {
        format += indent(depth) + formatXml(outside, depth);
    } else {
        format += "\r\n";
    }
    return format;
}

以下函数实现比较容易,就不贴代码出来了:

  • String getFirstTag(String content)
    content:xml报文
    return:获取xml报文的第一个标签,没有则返回为空

  • String getInsideContent(String tag, String content)
    tag:标签
    content:xml报文
    return:获取该标签下的value值

  • String getOutsideContent(String tag, String content)
    tag:标签
    content:xml报文
    return:获取该标签外的报文

  • String indent(int depth)
    depth:报文深度
    return:获取当前标签需要的空格字符串

测试

测试代码:
formatXml(content, 0)
测试数据:

<books><book><author>Jack Herrington</author><title>PHP Hacks</title><publisher>O'Reilly</publisher></book><book><author>王小为</author><title>深入在线工具</title><publisher>aTool.org组织</publisher></book></books>

测试截图:
这里写图片描述

项目地址

项目地址

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
4j是一个JavaXML API,它提供了一种方便的方式来处理XML文档。如果你想使用dom4j来格式化XML字符串,可以按照以下步骤进行操作: 1. 首先,你需要将XML字符串解析为一个Document对象。你可以使用dom4j提供的SAXReader类来完成这个任务。例如: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes())); ``` 2. 接下来,你需要创建一个OutputFormat对象,并设置它的属性来指定输出格式。例如: ```java OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); ``` 在这个例子中,我们使用createPrettyPrint()方法创建了一个格式化的OutputFormat对象,并设置了它的编码为UTF-8。 3. 然后,你需要创建一个XMLWriter对象,并将它与一个Writer对象关联起来。例如: ```java StringWriter writer = new StringWriter(); XMLWriter xmlWriter = new XMLWriter(writer, format); ``` 在这个例子中,我们使用了一个StringWriter对象来作为XMLWriter的输出目标。 4. 最后,你需要将Document对象写入XMLWriter中。例如: ```java xmlWriter.write(document); xmlWriter.flush(); ``` 在这个例子中,我们使用了write()方法将Document对象写入XMLWriter中,并使用flush()方法将缓冲区中的内容刷新到输出目标中。 完整的代码如下所示: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes())); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); StringWriter writer = new StringWriter(); XMLWriter xmlWriter = new XMLWriter(writer, format); xmlWriter.write(document); xmlWriter.flush(); String formattedXmlString = writer.toString(); ``` 这个代码片段将会把XML字符串格式化输出到formattedXmlString变量中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值