문제

이것은 후속 질문입니다 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>&lt;![CDATA[33665]]&gt;</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");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top