如何使用Java 1.4和SAX将任意数据编码为XML?

如何使用Java 1.4和SAX将任意数据编码为XML?

How do I encode arbitrary data to XML using Java 1.4 and SAX?

我们使用SAX来解析XML,因为它不需要为了解析单个值而将整个XML文档读入内存。 我读过许多文章,坚持认为SAX只能用于解析/解码XML,而不能创建XML。 这是真的?


不,这不是真的,您可以使用类似于以下内容的方式将XML编码为Java中的任何Writer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
char[] ch;
AttributesImpl atts = new AttributesImpl();
Writer writer = new StringWriter();
StreamResult streamResult = new StreamResult(writer);
SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();

// SAX2.0 ContentHandler
TransformerHandler transformerHandler = tf.newTransformerHandler();

Transformer serializer = transformerHandler.getTransformer();

serializer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
// serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"nodes.dtd");
serializer.setOutputProperty(OutputKeys.INDENT,"yes");

transformerHandler.setResult(streamResult);

transformerHandler.startDocument();

atts.clear();
// atts.addAttribute("","","xmlns","CDATA","http://www.example.com/nodes");
// atts.addAttribute("","","xmlns:xsi","CDATA","http://www.w3.org/2001/XMLSchema-instance");
// atts.addAttribute("","","xsi:schemaLocation","CDATA","/nodes.xsd");
transformerHandler.startElement("","","node_list", atts);

// displayName element
if (displayName != null) {
    transformerHandler.startElement("","","display_name", null);
    ch = displayName.toCharArray();
    transformerHandler.characters(ch, 0, ch.length);
    transformerHandler.endElement("","","display_name");
}

// nodes element
transformerHandler.startElement("","","nodes", null);

atts.clear();
atts.addAttribute("","","node_type","CDATA","sometype");
transformerHandler.startElement("","","node", atts);

ch = node.getValue().toCharArray();
transformerHandler.startElement("","","value", null);
transformerHandler.characters(ch, 0, ch.length);
transformerHandler.endElement("","","value");

transformerHandler.endElement("","","node");

transformerHandler.endElement("","","nodes");

transformerHandler.endElement("","","node_list");

transformerHandler.endDocument();

String xml = writer.toString();

SAX处理程序接口的设计易于实现。 编写具有类似内容的类很容易(也许包装了SAX接口)以使其易于调用-链接,记住要关闭的元素,更容易的属性等。


推荐阅读

    查询linux内存命令?

    查询linux内存命令?,系统,情况,信息,工具,电脑,状态,命令,内存,发行,总量,查

    linux命令chm文档?

    linux命令chm文档?,电脑,系统,文件,首页,百度,软件,电机,管理,产品,设备,谁知

    linux中编辑文档命令?

    linux中编辑文档命令?,状态,工作,命令,电脑,信息,第一,系统,编辑,终端,文件,L

    linux修改内存命令?

    linux修改内存命令?,系统,信息,标准,工具,数据,在线,内存,命令,分区,大小,Lin

    linux历史命令内存?

    linux历史命令内存?,系统,情况,信息,数据,命令,内存,文件,磁盘,历史,内容,Lin

    linux怎么看内存命令?

    linux怎么看内存命令?,系统,情况,信息,命令,内存,工具,发行,数据,表示,内容,l

    linux历史命令内存?

    linux历史命令内存?,系统,情况,信息,数据,命令,内存,文件,磁盘,历史,内容,Lin

    linux查内存空间命令?

    linux查内存空间命令?,系统,情况,信息,数据,内存,工具,命令,表示,方法,内容,L

    linux中看栈内存命令?

    linux中看栈内存命令?,系统,情况,信息,地址,数据,分析,命令,内存,工具,环境,l

    linux常用命令文档?

    linux常用命令文档?,工作,系统,地址,管理,网络,命令,信息,目录,操作,文件,lin

    linux活动内存命令?

    linux活动内存命令?,系统,情况,信息,命令,地方,地址,电脑,工具,位置,单位,详

    linux打开文档命令?

    linux打开文档命令?,密码,图片,系统,标准,命令,文件,终端,发行,信息,情况,Lin

    linux的查看内存命令?

    linux的查看内存命令?,情况,系统,信息,电脑,状态,工具,内存,命令,数据,总量,L

    linux下内存调整命令?

    linux下内存调整命令?,系统,情况,地址,工具,总量,总额,管理,内存,机制,内核,

    linux进入文档命令?

    linux进入文档命令?,工作,地址,图片,系统,标准,命令,信息,设备,一致,发行,Lin

    linux内存大小命令?

    linux内存大小命令?,系统,情况,电脑,信息,工具,状态,命令,内存,环境,分析,Lin

    linux内存命令大全?

    linux内存命令大全?,地址,系统,信息,工作,命令,情况,代码,分析,数据,工具,[Li

    linux命令监控内存?

    linux命令监控内存?,情况,系统,工具,信息,环境,分析,命令,工作,实时,电脑,lin

    linux内存监控命令?

    linux内存监控命令?,情况,系统,信息,电脑,总量,内存,命令,单位,环境,第一,lin

    linux上传文档命令?

    linux上传文档命令?,服务,工具,密码,系统,软件,工作,电脑,综合,命令,文件,Lin