JAXB编组和解编CDATA
我有一个需求,我有这样的XMLJAXB编组和解编CDATA,jaxb,marshalling,cdata,Jaxb,Marshalling,Cdata,我有一个需求,我有这样的XML <programs> <program> <name>test1</name> <instr><![CDATA[ some string ]]></instr> </program> <program> <name>test2</name> <instr>
<programs>
<program>
<name>test1</name>
<instr><![CDATA[ some string ]]></instr>
</program>
<program>
<name>test2</name>
<instr><![CDATA[ some string ]]></instr>
</program>
</programs>
测试1
测试2
我的程序需要将其解组到JAXB,进行一些处理,最后返回到xml。当我最终将JAXB对象整理成xml时,我得到的是没有CDATA前缀的纯文本。但是为了保持xml的完整性,我需要使用CDATA前缀将xml取回。JAXB似乎没有直接支持这一点。有没有办法做到这一点 无论CDATA与否,这应该不是问题,因为JAXB的输出将在需要时转义。注意:我是JAXB 2()专家组的负责人和成员 您可以使用MOXy的
@xmlcata
扩展来强制使用CDATA包装文本节点:
package blog.cdata;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;
@XmlRootElement(name="c")
public class Customer {
private String bio;
@XmlCDATA
public void setBio(String bio) {
this.bio = bio;
}
public String getBio() {
return bio;
}
}
了解更多信息
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
Document document =
docBuilderFactory.newDocumentBuilder().newDocument();
// Marshall the feed object into the empty document.
jaxbMarshaller.marshal(jaxbObject, document);
// Transform the DOM to the output stream
// TransformerFactory is not thread-safe
StringWriter writer = new StringWriter();
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer nullTransformer = transformerFactory.newTransformer();
nullTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
nullTransformer.setOutputProperty(
OutputKeys.CDATA_SECTION_ELEMENTS,
"myElement myOtherElement");
nullTransformer.transform(new DOMSource(document),
new StreamResult(writer));
这对我来说很好用。希望它能帮助其他人找到与我相同的东西。我希望坚持JAXB的默认实现。一个接近于解决这个问题的方法是。但XMLSerializer已被弃用,需要找到替代方案。@Blaise Doughan我使用MOXy 2.1.2,XmlCDATA未知。我在MOXy的类路径上使用了4个jar:
org.eclipse.persistence.antlr-2.1.2.jar,org.eclipse.persistence.asm-2.1.2.jar,org.eclipse.core-2.1.2.jar,org.eclipse.persistence.MOXy-2.1.2.jar
@basZero-EclipseLink MOXy 2.2中添加了@xmlcata
。当前版本是2.4.1。@basZero-是的,应该只是一个临时替代品。@basZero-您可以在这个链接上获得捆绑包:就像一个符咒一样工作!IMHO是最佳选择,因为它不需要MOXy,并且在指定元素中注入CDATA(而不是自定义序列化器类型的解决方案)@YMomb:JAXB将转义字符串中的任何XML内容,但有时您更喜欢在标记中包含XML格式的字符串,以便轻松复制粘贴。@Kangur:很高兴我能提供帮助。