如何在JAXB中转义unmarshal xml上的特殊字符

时间:2015-01-15 16:56:44

标签: java xml jaxb

我有下一个xml文件

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

在我执行unmarshal之后我因为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

1 个答案:

答案 0 :(得分:2)

我认为问题在于,JAXB unmarshaller解组了XML文档,但您的示例并不是格式良好的XML。要使XML有效,您必须将&替换为&amp;

确保您始终具有格式良好(语法上)和有效(根据XSD)XML文档。