首页 / 知识

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

2023-04-16 00:02:00

如何使用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接口)以使其易于调用-链接,记住要关闭的元素,更容易的属性等。


数据编码内存文档用于

最新内容

相关内容

猜你喜欢