2013-11-26 61 views
4

我想向我的位置標記添加說明,這是一系列html。當我運行編組器時,我得到一堆特殊字符串而不是特殊字符。即我的最終文件看起來像CDATA&lt;html&gt;而不是CDATA<html>如何在使用JAK kml庫編組時保留字符串格式

我不想覆蓋JAK編組器,所以我希望有一個簡單的方法來確保我的確切字符串被轉移到文件中。

謝謝。

回答

1

編組實際上逃脫特殊字符,"&quot;&&amp;<&lt;

我的建議是使用字符串替換功能,它實際上可以幫助恢復正常字符中的轉義字符。

try { 
      StringWriter sw = new StringWriter(); 
      return marshaller.marshal(obj, sw); 
     } catch (JAXBException jaxbe) { 
      throw new XMLMarshalException(jaxbe); 
     } 

使用SW對象,使用sw.toString()。代替(),以取代改變的字符回到原來的一個。

這可以確保您將所需的東西與您想要的同步。

希望這有助於..

+0

感謝您和KmlFactory,createKml可以使用類似這種'//返回kml.marshal(的System.out) 的StringWriter SW =新的StringWriter() kml.marshal( sw) return sw.toString()' – Vahid

0
  1. 通用的解決方案

創建NoEscapeHandler實施CharacterEscapeHandler(看例如在com.sun.xml.bind.marshaller.DumbEscapeHandler

import java.io.IOException; 
import java.io.Writer; 

import com.sun.xml.bind.marshaller.CharacterEscapeHandler; 

public class NoEscapeHandler implements CharacterEscapeHandler { 

    private NoEscapeHandler() {} 

    public static final CharacterEscapeHandler theInstance = new NoEscapeHandler(); 

    public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException { 
     int limit = start+length; 
     for (int i = start; i < limit; i++) { 
      out.write(ch[i]); 
     } 
    } 
} 

然後爲編組設置財產

marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", NoEscapeHandler.theInstance); 

或者使用DataWriter

StringWriter sw = new StringWriter(); 
DataWriter dw = new DataWriter(sw, "utf-8", NoEscapeHandler.theInstance); 
使用XmlStreamWriter和JAXB framgments

  • 最終XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory(); streamWriterFactory.setProperty(「escapeCharacters」,false);

  • From here

    相關問題