Java 转义XML字符而不转义CDATA标记
我正在尝试使用JAXB序列化一个类,该类具有一些CDATA字段,以及一些包含需要转义的特殊字符的字段(包括<和>)。问题是我不能让逃生处理在这两种情况下都正常工作 使用自定义CDATA适配器,如果我在封送拆收器上设置以下属性Java 转义XML字符而不转义CDATA标记,java,jaxb,Java,Jaxb,我正在尝试使用JAXB序列化一个类,该类具有一些CDATA字段,以及一些包含需要转义的特殊字符的字段(包括)。问题是我不能让逃生处理在这两种情况下都正常工作 使用自定义CDATA适配器,如果我在封送拆收器上设置以下属性 jaxbMarshaller.setProperty(CharacterEscapeHandler.class.getName(), (CharacterEscapeHandler) (ch, start, length, isAttVal, out) ->
jaxbMarshaller.setProperty(CharacterEscapeHandler.class.getName(),
(CharacterEscapeHandler) (ch, start, length, isAttVal, out) -> out.write(ch, start, length));
我得到:
<key1><![CDATA[Test]]></key1> # What I want
<key2>some_>_value</key2> # Invalid XML
#我想要什么
某些值无效的XML
如果我删除该属性并让jaxb处理自己的转义,我会得到:
<key1><![CDATA[Test]]> # Not what I want
<key2>some_<_value</key2> # What I want
![CDATA[测试]]#不是我想要的
一些我想要的东西
但我需要的是:
<key1><![CDATA[Test]]></key1>
<key2>some_<_value</key2>
一些价值观
有什么方法可以这样使用转义处理程序函数吗?您可以使用
com.sun.xml.bind.marshaller.CharacterEscapeHandler
接口来解决您的问题
示例Java类:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class AA {
String B;
String C;
public String getB() {
return B;
}
@XmlElement
public void setB(String b) {
B = b;
}
@Override
public String toString() {
return "AA [B=" + B + ", C=" + C + ", D=" + D + "]";
}
public String getC() {
return C;
}
@XmlElement
public void setC(String c) {
C = c;
}
public String getD() {
return D;
}
@XmlElement
public void setD(String d) {
D = d;
}
String D;
}
示例XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<aa>
<b>Title of Feed Item</b>
<c>some_>_value</c>
<d>
<![CDATA[Test]]>
</d>
</aa>
您可以使用com.sun.xml.bind.marshaller.CharacterEscapeHandler
接口来解决问题
示例Java类:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class AA {
String B;
String C;
public String getB() {
return B;
}
@XmlElement
public void setB(String b) {
B = b;
}
@Override
public String toString() {
return "AA [B=" + B + ", C=" + C + ", D=" + D + "]";
}
public String getC() {
return C;
}
@XmlElement
public void setC(String c) {
C = c;
}
public String getD() {
return D;
}
@XmlElement
public void setD(String d) {
D = d;
}
String D;
}
示例XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<aa>
<b>Title of Feed Item</b>
<c>some_>_value</c>
<d>
<![CDATA[Test]]>
</d>
</aa>
就我所见,这仍然会给我错误的结果,因为某些值是无效的XML。就我所见,这仍然会给我错误的结果,因为某些值是无效的XML。