`
zhyiwww
  • 浏览: 87318 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    Javascript格式化并高亮xml字符串的方法及注意事项

    两个关键点 1.使用DOMParser解析xml 2.递归遍历xml树,按格式输出每一个节点 ... * 格式化xml * @param content * @returns {*} */ this.parse_xml = function(content) { let xml_doc = null;

    利用pugixml 转化xml为string

    利用pugixml 转化xml为string

    Python字符串格式化常用手段及注意事项

    主要介绍了Python字符串格式化常用手段,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    jsp页面中如何将时间戳字符串格式化为时间标签.docx

    在上面的代码中,我们使用了我们的自定义标签来格式化时间戳字符串,并将格式化后的时间字符串输出到jsp页面中。 在jsp页面中将时间戳字符串格式化为时间标签可以通过使用自定义标签来实现。我们可以通过定义date...

    php输出xml格式字符串(用的这个)

    xml version=’1.0′ encoding=’utf-8′?&gt; &lt;SubFucParams&gt;1.0.0.0&lt;/Version&gt; &lt;Publisher&gt;d3e59f1d78f344c682bef3517a4b667f&lt;/Publisher&gt; &lt;PublisherName&gt;rong&lt;/PublisherName&gt; &lt;Story&gt; &lt;Type&gt;.txt&lt;/Type&gt; &lt;...

    xml入门教程/xml入门教程

    XSLT,是用于对XML进行文档格式转换,把一个XML文档转换成另一种格式的XML文档,但是其中内容是不变的。 &2.DTD(Document Type Difinition DTD文档是用于规定XML文档的结构。只有结构符合所引用的DTD文件的XML文件...

    beautify:简化在终端中格式化和打印漂亮且响应Swift的输出的过程

    美化简化在终端中格式化和打印美观且响应Swift的输出的过程。

    XML实用大全----xml详细参考书

    1.1.2 XML描述的是结构和语义,而不是格式化... 10 1.2 为什么开发人员对XML感到激动... 13 1.2.1 设计与特定领域有关的标记语言... 13 1.2.2 自描述数据... 13 1.2.3 应用间交换数据... 14 1.2.4 结构化和集成...

    Tinyxml 源代码(VC6 & VS2005)

    生成具有很多空格的格式化过的输出,这是为了尽可能让人看得明白。它们非常快,而且能够容忍XML文档中的格式错误。例如一个XML文档包含两个根元素和两个声明仍然能被打印出来。 C风格输入: 基于FILE* 用Parse()和...

    Android代码-一个精简、全面、方便的AndroidLog库–ALog

    可增加 Log 格式化器,默认已支持 Array, Throwable, Bundle, Intent 格式化输出 支持控制台长字符串的输出 支持多参数输出 支持单独写入文件 支持 JSON 串的输出 支持 XML 串的输出 支持 Live Templates jar 包不足...

    XMl实用大全(资料全易学习)

    1.1.2 XML描述的是结构和语义,而不是格式化 10 1.2 为什么开发人员对XML感到激动 13 1.2.1 设计与特定领域有关的标记语言 13 1.2.2 自描述数据 13 1.2.3 应用间交换数据 14 1.2.4 结构化和集成的数据 14 1.3 XML...

    xml实用大全和轻松学习手册和无废话xml

    1.1.2 XML描述的是结构和语义,而不是格式化 10 1.2 为什么开发人员对XML感到激动 13 1.2.1 设计与特定领域有关的标记语言 13 1.2.2 自描述数据 13 1.2.3 应用间交换数据 14 1.2.4 结构化和集成的数据 14 1.3 XML...

    mxGraph插件,java代码xml导出成图片

    前段实现mxgraph插件绘制流程图,后台实现保存的xml导出成图片格式,遇到图标没有引用,文字label位置不正确,label换行不识别 标签,linux服务器部署中文字体等问题

    vue通过过滤器实现数据格式化

    在使用插值表达式的时候,我们通常会有一种需求,就是将数据进行二次的格式化。VUE的过滤器的实现参考了linux的shell命令的管道的实现原理:即上一个命令的输出,是下一个命令的输入。 所以过滤器可以串接使用:{{...

    XML高级编程pdf

    9.3.3 输出格式 9.3.4 合并样式表 9.3.5 嵌入样式表 9.4 使用XSLT的例子 9.4.1 结构的转换 9.4.2 循环 9.4.3 排序 9.4.4 条件处理 9.4.5 名称模板 9.4.6 编号方式 9.4.7 拷贝 9.5 使用DOM进行XML文档的...

    XML实用大全(web开发必备手册)

    1.1.2 XML描述的是结构和语义,而不是格式化... 10 1.2 为什么开发人员对XML感到激动... 13 1.2.1 设计与特定领域有关的标记语言... 13 1.2.2 自描述数据... 13 1.2.3 应用间交换数据... 14 1.2.4 结构化和集成...

    XML 高级编程(高清版)

    9.3.3 输出格式 9.3.4 合并样式表 9.3.5 嵌入样式表 9.4 使用XSLT的例子 9.4.1 结构的转换 9.4.2 循环 9.4.3 排序 9.4.4 条件处理 9.4.5 名称模板 9.4.6 编号方式 9.4.7 拷贝 9.5 使用DOM进行XML文档的...

    XML高级编程 (Extensible Markup Language)

    9.3.3 输出格式 9.3.4 合并样式表 9.3.5 嵌入样式表 9.4 使用XSLT的例子 9.4.1 结构的转换 9.4.2 循环 9.4.3 排序 9.4.4 条件处理 9.4.5 名称模板 9.4.6 编号方式 9.4.7 拷贝 9.5 使用DOM进行XML文档的...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    单独用XMl不能显示页面,我们使用格式化技术,比如CSS或者XSL,才能显示XML标记创建的文档。 我们在前面第一章讲到XML是将数据和格式分离的。XML文档本身不知道如何来显示,必须有辅助文件来帮助实现。(XML取消了...

    XML高级编程

    9.3.3 输出格式 326 9.3.4 合并样式表 327 9.3.5 嵌入样式表 328 9.4 使用XSLT的例子 328 9.4.1 命令的转换 329 9.4.2 循环 335 9.4.3 排序 336 9.4.4 条件处理 338 9.4.5 名称模板 341 9.4.6 编号方式 342 9.4.7 ...

Global site tag (gtag.js) - Google Analytics