我有一个用例,在某些情况下(取决于业务逻辑),我们不想显示某些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);

10-08 15:31