本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zxcvbnmluton/archive/2010/04/26/5528747.aspx
二 SAX 用SAX生成xml并换行缩进
package xml;
import java.io.FileOutputStream;
import java.io.StringWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
public class XMLHandler {
public String createXMLFile() {
String xmlStr = null;
try {
Result resultXml = new StreamResult(new FileOutputStream("E://cities.xml"));
StringWriter writerStr = new StringWriter();
SAXTransformerFactory sff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler th = sff.newTransformerHandler();
Transformer transformer = th.getTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
th.setResult(resultXml);
th.startDocument();
AttributesImpl attr = new AttributesImpl();
th.startElement("", "", "country", attr);
th.startElement("", "", "china", attr);
th.startElement("", "", "city", attr);
String bj = "Beijing";
th.characters(bj.toCharArray(), 0, bj.length());
th.endElement("", "", "city");
th.startElement("", "", "city", attr);
String sh = "Shanghai";
th.characters(sh.toCharArray(), 0, sh.length());
th.endElement("", "", "city");
th.endElement("", "", "china");
th.endElement("", "", "country");
th.endDocument();
xmlStr = writerStr.getBuffer().toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return xmlStr;
}
public static void main(String args[]) {
XMLHandler xh = new XMLHandler();
xh.createXMLFile();
}
}
用SAX生成的xml如下
<?xml version="1.0" encoding="UTF-8"?><country><china><city>Beijing</city><city>Shanghai</city></china></country>
同样没有换行和缩进
在代码中增加
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
后生成的xml有了换行但仍没有缩进
<?xml version="1.0" encoding="UTF-8"?>
<country>
<china>
<city>Beijing</city>
<city>Shanghai</city>
</china>
</country>
同样按照DOM中的方法加空格
String four = "\n ";
TransformerHandler.characters(four.toCharArray(),0,four.length());
最终SAX代码如下:
package xml;
import java.io.FileOutputStream;
import java.io.StringWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
public class XMLHandler {
public String createXMLFile() {
String xmlStr = null;
try {
Result resultXml = new StreamResult(new FileOutputStream("E://cities.xml"));
StringWriter writerStr = new StringWriter();
SAXTransformerFactory sff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler th = sff.newTransformerHandler();
Transformer transformer = th.getTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
th.setResult(resultXml);
th.startDocument();
String four = "\n ";
String eight = "\n ";
AttributesImpl attr = new AttributesImpl();
th.startElement("", "", "country", attr);
th.characters(four.toCharArray(),0,four.length());
th.startElement("", "", "china", attr);
th.characters(eight.toCharArray(),0,eight.length());
th.startElement("", "", "city", attr);
String bj = "Beijing";
th.characters(bj.toCharArray(), 0, bj.length());
th.endElement("", "", "city");
th.characters(eight.toCharArray(),0,eight.length());
th.startElement("", "", "city", attr);
String sh = "Shanghai";
th.characters(sh.toCharArray(), 0, sh.length());
th.endElement("", "", "city");
th.characters(four.toCharArray(),0,four.length());
th.endElement("", "", "china");
th.endElement("", "", "country");
th.endDocument();
xmlStr = writerStr.getBuffer().toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return xmlStr;
}
public static void main(String args[]) {
XMLHandler xh = new XMLHandler();
xh.createXMLFile();
}
}
生成的XML
<?xml version="1.0" encoding="UTF-8"?>
<country>
<china>
<city>Beijing</city>
<city>Shanghai</city>
</china>
</country>
相关推荐
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
Java与XML联合编程之SAX篇.docJava与XML联合编程之SAX篇.doc
SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件SAX.java 操作xml文件
java操作xml编程实例(sax).doc
Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath 实例
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档
Java解析XML文件的DOM和SAX方式.doc
java操作xml的4中方法中各自所需要的包
java操作xml,包括dom、sax解析
利用java操作xml的源代码,包括DOM和SAX两种方式
《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...
android sax ,dom生成xml文件
JAVA与XML处理一个重要方法是SAX,该包提供了11个常用程序,下载后可以根据具体情况对改进.这11个程序都已调试过.包括对XML的各种处理.建议先下载这个.
Java SAX解析Xml Demo(详细注释)
Java 四种方式操作xml,包括xml,dom,sax,jdom这四种方式的一个简单例子。
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
用sax写的生成大XML文件。 用SAX写的解析大XML文件。 在解析大的XML文件,从java语言来说的话,目前应该SAX是比较好用的一个框架。
java操作xml文件的各种代码,关于DOM和sax的部分非常详细,注释很清楚