2015-01-15 167 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