2008-09-16 6 views

답변

4

아니, 그것과 유사한 것을 사용하여 Java에서 어떤 작가에 XML을 인코딩 할 수 있습니다, 사실이 아니다 :

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(); 
+0

덕분에 메모리에 전체 문서가 빌드됩니까? XSLT 프로세서를 사용하고 있습니까? –

+0

오래된 주제이지만이 코드는 제대로 작동하지 않습니다. 누군가는 앞으로이 해결책을 찾아서 위의 코드를 실행하려고 시도 할 것입니다. –

0

핸들러 인터페이스를 쉽게 구현할 수 있도록 설계 하였다 SAX. 비슷한 체인 (SAX 인터페이스를 래핑하는 것)을 작성하는 것은 쉽습니다. 호출 연결을 쉽게하고, 닫을 요소, 더 쉬운 특성 등을 기억하십시오.

관련 문제