`

Java生成XML的缩进和换行SAX

    博客分类:
  • XML
阅读更多
Java生成XML的缩进和换行SAX
2010-04-26 13:51

本文来自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>

 

分享到:
评论

相关推荐

    数据库数据生成xml

    5. **XML格式化**:为了确保XML文档的可读性和符合规范,可能需要添加命名空间、前缀、编码声明等,并对元素进行缩进和换行处理。 6. **保存XML文件**:最后,将生成的XML文档写入文件,以便于后续的传输、解析或...

    java写入和存储XML

    - 保存XML时应考虑编码(如UTF-8),以及是否格式化输出(增加缩进和换行)。 7. **XML验证** - 可以使用`javax.xml.validation`包中的工具对XML进行验证,确保其符合特定的XML Schema(XSD)或DTD(文档类型定义...

    基于java的开发源码-转换xml.zip

    - **XML缩进和样式**:XStream提供了方法来控制生成的XML的格式,如添加缩进和换行。 **XML处理的其他Java库:** 虽然XStream是一个强大的工具,但Java还有其他处理XML的库,如JAXB(Java Architecture for XML ...

    xml(jdom-dom4j).rar_DOM4J_dom4j xml java

    通过设置适当的格式化选项,可以控制生成的XML是否带缩进、换行等。 3. **XML的修改**: 修改XML文档涉及找到目标节点,然后进行替换、添加或删除操作。例如,可以使用`Element.elementIterator()`迭代所有子元素...

    java实现的xml格式化实现代码

    在这个例子中,我们创建了`OutputFormat.createPrettyPrint()`来生成带有缩进和换行的漂亮格式,或者使用`OutputFormat.createCompactFormat()`来得到紧凑格式。 5. **XMLWriter**:`XMLWriter`类用于将XML文档写入...

    数据库中任意的表导如XML中

    3. 利用Java的XML处理库(如DOM、SAX或JAXB)生成XML文档。 4. 对大表进行分批处理,以优化内存使用和性能。 5. 可能需要对特殊数据类型进行自定义处理。 这个过程涉及到了数据库操作、XML解析和Java编程等多个技术...

    dom4J完整版jar下载

    1. **解析XML**:DOM4J支持多种解析器,包括SAX和DOM。SAX解析器是事件驱动的,适用于大型XML文件,可以节省内存。DOM解析器则将整个XML文档加载到内存中,适合小型文档。 2. **文档对象模型(DOM)**:DOM4J提供了...

    dom4j jar包

    DOM4J常用于配置文件读写、数据交换、Web服务响应处理等领域,例如Spring框架中就使用DOM4J来解析和生成XML配置文件。 ### 7. 版本更新 压缩包中的`dom4j-1.6.1.jar`是DOM4J的一个稳定版本,发布于2006年。随着...

    dom4j-API.zip_DOM4J

    - DOM4J提供了`XMLWriter`和`OutputStream`,可以将`Document`对象写入到输出流,或者生成XML字符串。`OutputFormat`类用于控制XML的格式化输出,如缩进、换行等。 8. **事件处理(Event Handling)** - DOM4J...

    jdom-1.1-all

    4. **序列化XML**:将JDOM对象模型转换回XML字符串或写入文件,支持格式化输出,如添加换行和缩进。 5. **XPath支持**:JDOM 1.1引入了对XPath的支持,这使得能够通过简洁的表达式快速定位XML文档中的特定节点,...

    XmlWriter-开源

    - **灵活性**:开发者可以根据需求自定义 XML 输出格式,例如缩进、换行等。 4. **实际应用**: - **数据序列化**:将 Java 对象转换为 XML 格式,用于网络传输或存储。 - **配置文件生成**:创建应用程序的配置...

Global site tag (gtag.js) - Google Analytics