2015-01-15 83 views
2

我旁邊的xml文件如何逃脫組XML特殊字符JAXB

<xml name="Places"> 
    <data> 
     <row Code="1" Name="#X1.A&B(City)" /> 
    </data> 
</xml> 

而且我執行解組我得到Name屬性裏面,因爲符號(&)的例外The reference to entity "B" must end with the ';' delimiter後。

JAXBContext jaxbContext = JAXBContext.newInstance(Root.class); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
File xml = new File("test2.xml"); 
Object obj = unmarshaller.unmarshal(xml); 

我該如何逃避這些角色?

我已經嘗試添加CharacterEscapeHandler,但它不工作的Unmarshaller

private static class EscapeHandler implements CharacterEscapeHandler { 
    @Override 
    public void escape(char[] buf, int start, int len, boolean isAttValue, 
      Writer out) throws IOException { 
      ... 
    } 

} 

unmarshaller.setProperty("com.sun.xml.bind.marshaller.CharacterEscapeHandler", 
new EscapeHandler()); 

而且我越來越javax.xml.bind.PropertyException: name: com.sun.xml.bind.marshaller.CharacterEscapeHandler

+0

可能是一個重複:http://stackoverflow.com/a/18017130/506855 雖然這是關於編組而不是反編組。 – Puce 2015-01-15 17:33:01

+0

JAXB實現將取決於較低級別(SAX或StAX)解析器。如果您可以找到一個容忍無效XML的容器,那麼您將能夠讓JAXB使用它。 – 2015-01-15 18:23:11

回答

2

的問題是,我認爲,那JAXB解組XML解組文件,但您的示例不是格式良好的XML。要使XML有效,您必須將&替換爲&amp;

確保您始終具有格式良好(符合語法)和有效(根據XSD)的XML文檔。

+0

是的,我知道這不是有效的XML,但有任何解決方案來逃避這些字符?我發現了CharacterEscapeHandler,但是我怎樣才能將它添加到我的反編組器中? – 2015-01-15 17:12:34

+0

@Orest在解組之前,應確保XML格式正確且有效。你從哪裏得到你的XML文檔?確保提供者僅提供格式正確且有效的XML文檔。 – Puce 2015-01-15 17:15:36

+0

我從第三方服務獲取它,所以我無法做任何事情。我應該在我身邊驗證它。 – 2015-01-15 17:18:35