Java 如何在JAXB中解组xml时处理特殊字符
我的测试xml内容Java 如何在JAXB中解组xml时处理特殊字符,java,xml,jaxb,Java,Xml,Jaxb,我的测试xml内容 <p id="033" num="03">geopotent change high.</p> 我的Jaxb解组源代码是 JAXBContext jaxbContext = JAXBContext.newInstance(CnDocument.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); documen
<p id="033" num="03">geopotent change high.</p>
我的Jaxb解组源代码是
JAXBContext jaxbContext = JAXBContext.newInstance(CnDocument.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
document = (CnDocument) jaxbUnmarshaller.unmarshal(xmlFile);
我怎样才能摆脱那些角色&x2由于XML内容的格式不正确,因此会出现JAXB解析错误。
它应该是&x2;使用分号,而不是&x2。会出现JAXB解析错误,因为XML内容的格式不正确。
它应该是&x2;带分号的非&x2。
位势变化&x2高。
不是有效的XML。使用&;对符号和字符进行转义;或者通过添加分号来完成字符引用:&x2位势变化和x2高。
不是有效的XML。使用&;对符号和字符进行转义;或者通过添加分号来完成字符引用:&x2 这是一种方法:import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class XmlCharacterHandler implements CharacterEscapeHandler {
public void escape(char[] buf, int start, int len, boolean isAttValue,
Writer out) throws IOException {
StringWriter buffer = new StringWriter();
for (int i = start; i < start + len; i++) {
buffer.write(buf[i]);
}
String st = buffer.toString();
if (!st.contains("CDATA")) {
st = buffer.toString().replace("&", "&").replace("<", "<")
.replace(">", ">").replace("'", "'")
.replace("\"", """);
}
out.write(st);
System.out.println(st);
}
}
这是您可以执行的一种方法:
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class XmlCharacterHandler implements CharacterEscapeHandler {
public void escape(char[] buf, int start, int len, boolean isAttValue,
Writer out) throws IOException {
StringWriter buffer = new StringWriter();
for (int i = start; i < start + len; i++) {
buffer.write(buf[i]);
}
String st = buffer.toString();
if (!st.contains("CDATA")) {
st = buffer.toString().replace("&", "&").replace("<", "<")
.replace(">", ">").replace("'", "'")
.replace("\"", """);
}
out.write(st);
System.out.println(st);
}
}
解组器不支持CharacterEscapeHandler。@min:您可以处理第一个代码快照中提到的逻辑。解组器不支持CharacterEscapeHandler。@min:您可以处理第一个代码快照中提到的逻辑。
marshaller.setProperty(CharacterEscapeHandler.class.getName(),
new XmlCharacterHandler());