您的位置:首页 > 其它

使用jdom来格式化输入xml

2010-07-14 17:00 399 查看
今天无意中听同事说到格式化输出xml代码,于是一时兴起,就写了一个小工具,使用了jdom,可以到jdom官方网站http://www.jdom.org/下载。

具体代码如下:

import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
* @author JustANobody 高源
* @homePage http://blog.csdn.net/JustANobody * @date Jul 14, 2010 4:40:56 PM
* @version V1.0
*/
public class MyXMLTool {

/**
* 该方法用于将XML文档的节点进行格式化打印,有点类似于IDE的代码格式化
* @param node XML文档的节点
* @param level 参数level用来标识缩进等级的,子节点越多打印的缩进就越多
*/
@SuppressWarnings("unchecked")
public static  void formatXML(Element node,int level){
for(int i=0;i<level;i++){
System.out.print("    "); //有子节点的缩进为4个空格,你也可以用/t,不过/t距离太宽看起来不舒服
}
System.out.print("<"+node.getName());
//获取该节点的所有属性
List attrs=node.getAttributes();
if(attrs!=null && attrs.size()>0){
//如果有属性,则打印出所有属性
for(Object o: attrs){
Attribute att=(Attribute)o;
System.out.print(" "+att.getName()+"=/""+att.getValue()+"/"");
}
}
System.out.print(">");

if(node.getTextTrim()!=null && !node.getTextTrim().equals("")){
//如果该节点有值,则打印对应的值
System.out.print(node.getTextTrim());
}else if (node.getChildren().size() <= 0) {
//如果没有子节点,就什么也不用做,直接打印该节点的结束标签
}
else {
// 如果没有节点值并且有子节点就换行,打印出相应的子节点
System.out.println();
// 获取该元素所有的子节点
List list = node.getChildren();
// 如果有子节点,继续递归,并将层次level+1,打印缩进
for (Object obj : list) {
Element elm = (Element) obj;
// 递归调用
formatXML(elm, level + 1);
}
for (int i = 0; i < level; i++) {
System.out.print("    ");
}
}
//打印该节点的结束标签
System.out.println("</"+node.getName()+">");
}

public static void main(String[] args) throws Exception{
SAXBuilder build=new SAXBuilder();
Document doc=build.build("web.xml");//参数设置为你的xml来源
Element root=doc.getRootElement();//从根节点开始格式化打印xml文档
MyXMLTool.formatXML(root, 0);

}

}

随手写的,可能有的地方需要改进,有什么好的方式或者建议还望大家多多指点!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐