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体系和技术的理解。



相关文章


RMI规范--第二章Java分布式对象模型
RMI规范--第三章
XML串的格式化输出
JavaSE6WebService之旅
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛