如何在 JAXB 中解组 xml 时转义特殊字符
How to escape special characters on unmarshal xml in JAXB
我有下一个 xml 文件
<xml name="Places">
<data>
<row Code="1" Name="#X1.A&B(City)" />
</data>
</xml>
在我执行 unmarshal 之后,我得到了异常 The reference to entity "B" must end with the ';' delimiter
因为 Name 属性中的 & 符号。
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
我认为,问题是 JAXB 解组器解组 XML 文档,但您的样本格式不正确 XML。要使 XML 有效,您必须将 &
替换为 &
。
确保您始终拥有格式正确(语法上)且有效(根据 XSD)XML 文档。
我有下一个 xml 文件
<xml name="Places">
<data>
<row Code="1" Name="#X1.A&B(City)" />
</data>
</xml>
在我执行 unmarshal 之后,我得到了异常 The reference to entity "B" must end with the ';' delimiter
因为 Name 属性中的 & 符号。
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
我认为,问题是 JAXB 解组器解组 XML 文档,但您的样本格式不正确 XML。要使 XML 有效,您必须将 &
替换为 &
。
确保您始终拥有格式正确(语法上)且有效(根据 XSD)XML 文档。