XML串的格式化输出
文章作者 100test 发表时间 2007:03:14 16:46:25
来源 100Test.Com百考试题网
如果我们格式化一个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串:
0
aaaa
bbbb
ccc
dddd
eee
ffff
eeeee
pppp
kkkk
ssss
eeeeee
ttttt
格式化后的xml串如下:
0
aaaa
bbbb
ccc
dddd
eee
ffff
eeeee
pppp
kkkk
ssss
eeeeee
ttttt
问题的关键:
其实,从实现的角度来说,我们可以看到,最关键的其实是我们对java体系IO的理解和使用。
我在刚开始实现的时候,我用了
Format(String str){
SAXReader saxReader = new SAXReader().
Document doc= saxReader.read(str).
……
}
但是,编译的时候就抛出了异常。
后来我觉得可能是字符串流没有缓冲,所以不行。
所以我就使用了
StringBufferInputStream,弄了好一会也没有搞定。
最后我就使用了StringReader和StringWriter实现了xml字符串的格式化。
所以归根结底,我们要说,能否正确和熟练的使用java来实现功能,最终要看你对java体系和技术的理解。