格式化输出XML串的方法

格式化输出XML串的方法

 

 

Author : zhyiwww

E-Mail : zhyiwww@163.com

Date : 2007-1-15

转载请注明出处(copyright by @ zhangyi)

 

如果我们格式化一个xml文件话,我们可能使用下面的方法:

try{

SAXReader saxReader = new SAXReader();

注释:先读入一个文件流

Document doc= saxReader.read(new FileInputStream(new File(filePath)));

注释:创建输出格式

OutputFormat format = OutputFormat.createPrettyPrint();

注释:制定输出xml的编码类型

format.setEncoding("GBK");

注释:创建一个文件输出流

XMLWriter writer= new XMLWriter(new FileWriter(new File(filename)),format);

注释:将格式化后的xml串写入到文件

writer.write(doc);

writer.close();

}catch(Exception ex){

……

}

经过的步骤是:

读取xml文件,然后再格式化输出。

那么,如果我们得到了一个XML的串,当然,是在内存中的,我们有如何返回一个格式化后的串呢?

其实也很简单,就是先把xml的串读到一个流中,然后解析,在格式化输出就可以了。下面就是我的实现;

注释:str是你的参数,也就是在内存中的没有格式化过的xml

public static String format(String str) throws UnsupportedEncodingException,

IOException, DocumentException {

//System.out.println(" str : " + str);

SAXReader reader=new SAXReader();

//System.out.println(reader);

注释:创建一个串的字符输入流

StringReader in=new StringReader(str);

Document doc=reader.read(in);

// System.out.println(doc.getRootElement());

注释:创建输出格式

OutputFormat formater=OutputFormat.createPrettyPrint();

注释:设置xml的输出编码

formater.setEncoding("utf-8");

注释:创建输出(目标)

StringWriter out=new StringWriter();

注释:创建输出流

XMLWriter writer=new XMLWriter(out,formater);

注释:输出格式化的串到目标中,执行后。格式化后的串保存在out中。

writer.write(doc);

//writer.close();

System.out.println(out.toString());

注释:返回我们格式化后的结果

return out.toString();

}

示例:

格式化前的xml串:

<?xml version="1.0" encoding="utf-8"?><schemes> <scheme> <num>0</num> <line> <lnName>aaaa</lnName> <stops> <stop> <spName>bbbb</spName> </stop>

<stop><spName>ccc</spName> </stop> <stop> <spName>dddd</spName> </stop> <stop><spName>eee</spName> </stop> <stop><spName>ffff</spName>

</stop><stop> <spName>eeeee</spName></stop> </stops></line> <line> <lnName>pppp</lnName> <stops> <stop> <spName>kkkk</spName> </stop> <stop>

<spName>ssss</spName> </stop> <stop> <spName>eeeeee</spName></stop><stop><spName>ttttt</spName></stop></stops></line>

</scheme> </schemes>

格式化后的xml串如下:

<?xml version="1.0" encoding="utf-8"?>

<schemes>

<scheme>

<num>0</num>

<line>

<lnName>aaaa</lnName>

<stops>

<stop>

<spName>bbbb</spName>

</stop>

<stop>

<spName>ccc</spName>

</stop>

<stop>

<spName>dddd</spName>

</stop>

<stop>

<spName>eee</spName>

</stop>

<stop>

<spName>ffff</spName>

</stop>

<stop>

<spName>eeeee</spName>

</stop>

</stops>

</line>

<line>

<lnName>pppp</lnName>

<stops>

<stop>

<spName>kkkk</spName>

</stop>

<stop>

<spName>ssss</spName>

</stop>

<stop>

<spName>eeeeee</spName>

</stop>

<stop>

<spName>ttttt</spName>

</stop>

</stops>

</line>

</scheme>

</schemes>

问题的关键:

其实,从实现的角度来说,我们可以看到,最关键的其实是我们对java体系IO的理解和使用。

我在刚开始实现的时候,我用了

Format(String str){

SAXReader saxReader = new SAXReader();

Document doc= saxReader.read(str);

……

}

但是,编译的时候就抛出了异常。

后来我觉得可能是字符串流没有缓冲,所以不行。

所以我就使用了

StringBufferInputStream,弄了好一会也没有搞定。

最后我就使用了StringReaderStringWriter实现了xml字符串的格式化。

所以归根结底,我们要说,能否正确和熟练的使用java来实现功能,最终要看你对java体系和技术的理解。