private  String formatXml(String xml) { Document document = null;
XMLWriter xmlwriter = null;
StringWriter writer = new StringWriter();

//创建输出格式,制定输出xml的编码类型
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("GB2312"); try {
document = DocumentHelper.parseText(xml); xmlwriter = new XMLWriter(writer, format);
xmlwriter.write(document);

xmlwriter.close();
writer.close();
    //返回编译后的字符串格式
    return writer.getBuffer().toString();   //问题在这里,我的流都已经关闭了,但是我多次调用这个方法还是可以得到格式化之后的XML
} catch (Exception e) {
return null;
}
}现在修改为
private  String formatXml(String xml) { Document document = null;
XMLWriter xmlwriter = null;
StringWriter writer = new StringWriter();

//创建输出格式,制定输出xml的编码类型
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("GB2312"); try {
document = DocumentHelper.parseText(xml); xmlwriter = new XMLWriter(writer, format);
xmlwriter.write(document);
String returnVlaue = writer.getBuffer().toString(); //流关闭之前把格式化之后的XML的值传给变量 xmlwriter.close();
writer.close();
    //返回编译后的字符串格式
    return returnVlaue;  //返回返回值
} catch (Exception e) {
return null;
}
}
请问有人明白为什么上面的代码页可以正常使用么?

解决方案 »

  1.   

    在网上找到了这些,希望对你有帮助使用 XmlWriter 方法输出 XML 时,在调用 Close 方法前,不会写入元素和属性。例如,如果使用 XmlWriter 写入 XmlDocument,则在关闭 XmlWriter 之前,您将无法在目标文档中看到写入的元素和文档。http://msdn.microsoft.com/zh-cn/library/system.xml.xmlwriter.close.aspx
      

  2.   

    您好,我看了您的链接的帖子了,但是很奇怪啊,我在关闭流之前把值打出来了,是可以写入值了啊,
    <?xml version="1.0" encoding="GB2312"?>
    <VOU><SUM><VOUCHER_PKID>CZ38</VOUCHER_PKID><TOTAL_AMOUNT>1800000</TOTAL_AMOUNT>
    System.out.println(returnVlaue); xmlwriter.close();
    writer.close();
        //返回编译后的字符串格式
        return returnVlaue;
      

  3.   

    为什么要在 close 之前去获取呢?没有这么用的。
      

  4.   


    可是在流关闭之后怎么取啊,writer.close();