java - 在Stax和jaxb中,处理 CData

  显示原文与译文双语对照的内容

在 spring StaxtItemWriter和 Jaxb marshaller中,我尝试编写一个包含CData元素的XML fragment 。 但是输出是:

  • 不使用 <[CDATA[.. . ]]> 包装!
  • 或者转义:<>&lt;&gt; 替换

首先,项目编写器:


<bean id="userAuthorizationErrorItemWriter"
 class="org.springframework.batch.item.xml.StaxEventItemWriter">
 <property name="rootTagName" value="UserAuthorizationEvent"/>
 <property name="rootElementAttributes">
 <map>
 <entry key="xmlns:xsi" value="http://www.w3.org/2001/XMLSchema-instance"/>
 </map>
 </property>
 <property name="marshaller" ref="userAuthorizationTypeMarshaller"/>
 <property name="overwriteOutput" value="true"/>
 <property name="resource" value="file://C:/TEMP/fichierOUT.xml"/>
 <property name="transactional" value="false"/>
</bean>

然后是 JAXB marshaller


<bean id="userAuthorizationTypeMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
 <property name="contextPath" value="com.usecase1.xsd.model"/>
</bean>

java类( 简化):


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name ="UserAuthorizationType", propOrder = {"action"})
@XmlRootElement(name ="UserAuthorization")
public class UserAuthorizationType {

 @XmlElement(name ="Action", required = true)
 protected String action;

 public String getAction() {
 return action;
 }

 public void setAction(String value) {
 this.action = value;
 }
}

写入文件时,我希望将操作值封装到 <[CDATA[.. . ]]> 块中。!

我尝试使用 @XmlJavaTypeAdapter(Adapter1.class) 返回:


public String marshal(String value) {
 return"<![CDATA[" + value +"]]>";
}

但是输出被转义:


<UserAuthorization><Action>&lt;![CDATA[first, second, third]]&gt;</Action></UserAuthorization>

你 怎么 想?

时间: 作者:

你必须创建一个自定义的XML编码器和 register,这些元素应该输出为 CDATA 。 看看这个例子是否能帮助 https://jaxb.java.net/faq/JaxbCDATASample.java

...