如何使用JAXB实例化一个空元素

doe*_*man 9 java xml jaxb

我使用JAXB来创建XML消息.我需要创建的XML(为了简单起见):

<request>
  <header/>
</request>
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

import javax.xml.bind.annotation.*;

@XmlRootElement(name = "request")
public class Request {

    private String header;

    @XmlElement(required=true)
    public String getHeader() {
      return header;
    }

    public void setHeader(String header) {
      this.header=header;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:header元素未显示(标题为null).当标头设置为空字符串时,将显示以下内容:

<request>
  <header></header>
</request>
Run Code Online (Sandbox Code Playgroud)

当我用作类型Object代替时String,结果更糟:

<request>
  <header xsi:type="xs:string" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></header>
</request>
Run Code Online (Sandbox Code Playgroud)

BTW:我正在使用此代码来创建XML字符串.

是否有可能得到一个空标签?

Tom*_*ine 11

在XML中,<header/>并且<header></header>是一回事.如果你真的想要前者,那就使用美化剂.javax.xml.transform.TransformerFactory.newTransformer()可能会为你做那件事.

  • 你好汤姆.你能详细解释一下如何做到这一点吗? (4认同)

Chr*_*ail 5

String 对象的空标签本质上是空字符串。

如果您拨打以下电话,您将得到您正在寻找的东西:

request.setHeader("")
Run Code Online (Sandbox Code Playgroud)

我还应该注意到,在 XML 中,以下两个标头声明是相同的。这两个节点都没有子文本节点。它们本质上是相同的,并且将被所有 XML 解析器以相同的方式处理:

<header></header>

<header/>
Run Code Online (Sandbox Code Playgroud)