当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>JAVA网络编程

XML串的格式化输出

-----------------------------------------------------------------
Author    :    zhyiwww
E-Mail    :    [email protected]
Date    :    2007-1-10
转载请注明出处(JavaResearch.org  [email protected]
-----------------------------------------------------------------



如果我们格式化一个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体系和技术的理解。

相关内容
赞助商链接