我有一个用例,在某些情况下(取决于业务逻辑),我们不想显示某些XML元素。所以我不能使用@XmlTransient(我认为)。
我想做这样的事情。
private void HideSome() {
// some code to hide a specific element
}
最佳答案
您应该将注释中不需要的元素和相应的XSD定义为可选(minOccurs = 0 maxOccurs = 1)。
如果您不希望呈现它,请将其设置为null,然后再将其传递给编组器。
XSD
<complexType name="MyElementType">
<sequence>
<element name="ID" type="string" />
<element name="MaybeHere" type="string" minOccurs="0" maxOccurs="1" />
</sequence>
</complexType>
<element name="MyElement" type="MyElementType" />
爪哇
@XmlRootElement(name="MyElement")
public class MyElement {
private String id;
private String maybeHere;
@XmlElement(name="ID")
public String getId() {return id;}
public void setId(String s){this.id = s;}
@XmlElement(name="MaybeHere", required=false)
public String getMaybeHere() {return maybeHere;}
public void setMaybeHere(String s) { this.maybeHere = s;}
}
编组
/* in some code */
if(businessCondition){
myElem.maybeHere = null;
}
marshaller.marshal(myElem);