H5W3
当前位置:H5W3 > 其他技术问题 > 正文

XML串的格式化输出

—————————————————————–Author    :    zhyiwwwE-Mail    :    zhyiwww@163.comDate    :    2007-1-10转载请注明出处(JavaResearch.org  zhyiwww@163.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串: <?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,弄了好一会也没有搞定。最后我就使用了StringReader和StringWriter实现了xml字符串的格式化。所以归根结底,我们要说,能否正确和熟练的使用java来实现功能,最终要看你对java体系和技术的理解。

本文地址:H5W3 » XML串的格式化输出

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址