2
我們使用SAX來解析XML,因爲它不需要將整個XML文檔讀入內存以解析單個值。我閱讀了許多文章,強調SAX只能用於解析/解碼XML,而不能創建它。這是真的?如何使用Java 1.4和SAX將任意數據編碼爲XML?
我們使用SAX來解析XML,因爲它不需要將整個XML文檔讀入內存以解析單個值。我閱讀了許多文章,強調SAX只能用於解析/解碼XML,而不能創建它。這是真的?如何使用Java 1.4和SAX將任意數據編碼爲XML?
不,這不是真的,你可以使用類似的東西編碼XML在Java中任何作家:
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接口)很容易,以便於調用鏈接,記住要關閉哪個元素,更簡單的屬性等。
這是否會在內存中建立整個文檔?使用XSLT處理器? – 2009-12-29 22:39:08