색소폰 xmlhandler에서 cdata 섹션을 출력하는 방법
문제
이것은 후속 질문입니다 Oracle에서 XML로 문자를 인코딩하는 방법은 무엇입니까?
내 환경에서 나는 Java를 사용하여 결과를 XML로 직렬화합니다. 출력 스트림 자체에 액세스 할 수 없으며 org.xml.sax.contenthandler에만 액세스 할 수 없습니다.
cdata 섹션에서 문자를 출력하려고 할 때 :
기본적으로 다음과 같습니다.
xmlHandler.startElement(uri, lname, "column", attributes);
String chars = "<![CDATA["+rs.getString(i)+"]]>";
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endElement(uri, lname, "column");
나는 이것을 얻는다 :
<column><![CDATA[33665]]></column>
그러나 나는 이것을 원한다 :
<column><![CDATA[33665]]></column>
그렇다면 색소폰 contenthandler로 cdata 섹션을 어떻게 출력 할 수 있습니까?
해결책
handler.characters 함수가 탈출하도록 설계 되었기 때문에 탈출됩니다. <![CDATA[
부분은 값의 일부로 간주되지 않습니다.
새로 노출 된 방법을 사용해야합니다 DefaultHandler2
또는 사용하십시오 TransformerHandler
출력 키를 설정할 수있는 접근 방식 CDATA_SECTION_ELEMENTS
, CDATA에 동봉 된 하위 텍스트 섹션을 출력 해야하는 공백 구분 구분 된 태그 이름 목록을 가져옵니다.
StreamResult streamResult = new StreamResult(out);
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler hd = tf.newTransformerHandler();
Transformer serializer = hd.getTransformer();
serializer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "column");
hd.setResult(streamResult);
hd.startDocument();
hd.startElement("","","column",atts);
hd.characters(asdf,0, asdf.length());
hd.endElement("","","column");
hd.endDocument();
다른 팁
당신은 사용해야합니다 startCDATA()
그리고 endCData()
구분자로서, 즉
xmlHandler.startElement(uri, lname, "column", attributes);
xmlHandler.startCDATA();
String chars = rs.getString(i);
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endCDATA();
xmlHandler.endElement(uri, lname, "column");
제휴하지 않습니다 StackOverflow