首页 | 外语类 | 职业资格 | 公务员 | IT认证 | 财务会计 | 学历类 | 建筑工程 | 医药类 | 外贸类 | 知道 | 论坛   
  考试动态 | 报考指南 | 基础知识 | 专业语言 | 历年真题 | 模拟试题 | 技巧心得
  当前位置:中华考试网 > IT 认证 > JAVA > 基础知识 > 文章内容
  
XML串的格式化输出
中华考试网     [ 2007-2-28 ]
如果我们格式化一个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体系和技术的理解。

考试编辑:admin

 评论与纠错
请您发表评论或文章错误报告。查看所有评论
 注意文明用语并遵守相关规定
 48小时热文排行
 今日更新
 真题排行
 模拟题排行
关于本站  网站声明  广告服务  联系方式  站内导航  友情链接
Copyright © 2007 中华考试网(Examw.com) All Rights Reserved