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

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2007/01/17/622750.html如需转载请自行联系原作者


kenty

相关文章
|
XML 数据格式
【sublime Text】sublime Text3安装可以使xml格式化的插件
应该有机会 ,会碰到需要格式化xml文件的情况。 例如,修改word转化的xml文件之后再将修改之后的xml文件转化为word文件。 但是,word另存的xml文件是没有格式的一片:    那怎么格式化 这个巨大的xml文件的格式呢?   解决方法: 1。
5105 0
|
5月前
|
XML 数据格式
程序技术好文:格式化xml
程序技术好文:格式化xml
86 0
|
12月前
|
XML Java API
Java实现XML格式化
Java实现XML格式化
301 0
|
缓存 Java Android开发
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
288 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
|
Android开发
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(三)
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(三)
131 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(三)
|
Android开发
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(二)
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(二)
148 0
|
Android开发 Java 数据格式
eclipse的格式化规则(即format.xml文件)
eclipse的格式化规则(即format.xml文件) 下面是文件内容 ...
1342 0
|
Android开发 开发工具
【我的Android进阶之旅】解决strings.xml格式化占位符错误: Multiple substitutions specified in non-positional format
今天有一个Android新手使用strings.xml进行格式化的时候报了占位符错误, Multiple substitutions specified in non-positional format; did you mean to add the f...
5576 0