zoukankan      html  css  js  c++  java
  • 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体系和技术的理解。

  • 相关阅读:
    Spine学习四
    Spine学习三
    用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计
    用 C 语言开发一门编程语言 — 变量元素设计
    用 C 语言开发一门编程语言 — Q-表达式
    C 编程异常 — double free or corruption (fasttop)
    用 C 语言开发一门编程语言 — S-表达式
    用 C 语言开发一门编程语言 — 异常处理
    用 C 语言开发一门编程语言 — 抽象语法树
    用 C 语言开发一门编程语言 — 语法解析器
  • 原文地址:https://www.cnblogs.com/kentyshang/p/622750.html
Copyright © 2011-2022 走看看