2012-01-18 3 views
2

http://stax.codehaus.org/에서 vrsion 1.2.0의 StAX Streaming API를 사용하고 있습니다. 다음 xml을 파일에 쓰려고 할 때 char보다 큰 문자가 이스케이프되지 않습니다. 그러나 탈출에 문제가있는 것보다 덜한 것 같습니다.StAX 초과 이스케이프 처리 (>)

out = new FileOutputStream("foo.xml"); 
XMLOutputFactory factory = XMLOutputFactory.newInstance(); 
XMLStreamWriter writer = factory.createXMLStreamWriter(out); 
writer.writeStartDocument(); 
writer.writeStartElement("foo"); 
writer.writeAttribute("test", "<foo>"); 
writer.writeEndElement(); 
writer.writeEndDocument(); 
writer.flush(); 
writer.close(); 
out.close(); 

출력 (관련 만) 이것이다 :

<foo test="&lt;foo>" 

나는 또한 writeCharacters 방법을 사용하려고 한 - 같은 결과. 이것은 버그 또는 의도입니까? 해결 방법이 있습니까? 당신은 탈출하지 필요을하기 때문에합니다 ('&'에

replaceAll(">", "&gt;"); 

결과가 수동으로> 교체가 자신을 탈출하기.

감사 사전에 어떤 도움을. 기본적으로

답변

7

, 그건 >. 이미 올바른 일을하고 있습니다.

+0

[link] (http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/StAX4)와 같은 출처에 대해서 궁금합니다. HTML) writeCharacters (...) 메서드는 &, <, > 및 "."와 같은 문자를 이스케이프하는 데 사용됩니다. – elyan

+0

@elyan : 정직한 문서 일뿐입니다. 아마 어느 시점에서 * (불필요하게)'>'를 벗어 났지만, 지금은 그렇지 않습니다. –

+0

@elyan : 방금 스펙을 살펴 보았습니다. 이스케이프해야하는 경우가 하나 있습니다. "오른쪽 꺽쇠 괄호 (>)는 문자열"> "을 사용하여 표현 될 수 있으며 호환성을 위해 ">"또는 "[]]>"해당 문자열이 CDATA 섹션의 끝을 표시하지 않을 때 "문자열에 나타날 때 문자 참조를 사용하여 이스케이프 처리해야합니다. –

관련 문제