Java 如何用JAXB实例化空元素
我使用JAXB创建XML消息。我需要创建的XML是(为了简单起见): 问题:未显示Java 如何用JAXB实例化空元素,java,xml,jaxb,Java,Xml,Jaxb,我使用JAXB创建XML消息。我需要创建的XML是(为了简单起见): 问题:未显示标题元素(标题为null)。当标题设置为空字符串时,将显示以下内容: <request> <header></header> </request> 顺便说一句:我正在使用创建XML字符串 有可能得到一个空标记吗?在XML中,和是一样的。如果你真的想要前者,那就用美容剂javax.xml.transform.TransformerFactory.newTransf
标题
元素(标题为null
)。当标题设置为空字符串时,将显示以下内容:
<request>
<header></header>
</request>
顺便说一句:我正在使用创建XML字符串
有可能得到一个空标记吗?在XML中,
和
是一样的。如果你真的想要前者,那就用美容剂javax.xml.transform.TransformerFactory.newTransformer()
可能会为您这样做。字符串对象的空标记本质上就是空字符串
如果您拨打以下电话,您将得到您想要的:
request.setHeader("")
我还应该注意,在XML中,头的以下两个声明是相同的。这两个节点都没有子文本节点。它们本质上是相同的,所有XML解析器都将对它们进行相同的处理:
<header></header>
<header/>
正如@Tom Hawtin-tackline所说
和
是相同的。解析器将为您提供“”
您必须在标题批注上添加nillable
@xmlement(nillable=true,required=true)
公共字符串getHeader(){
返回头;
}
我希望这段代码将为null
值生成以下XML
import javax.xml.bind.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Request {
public static void main(String[] args) throws JAXBException {
final Request request = new Request();
final JAXBContext context = JAXBContext.newInstance(Request.class);
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
marshaller.marshal(request, System.out);
System.out.flush();
}
@XmlElement(nillable=true, required=true)
private String header;
}
印刷品
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<request>
<header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</request>
我想要同样的东西,实际上是
而不是
在xml序列化过程中
由于空值(而不是空字符串)将生成正确的结果,因此我修改了setter方法,将值显式设置为空:
public void setHeader(String header) {
this.header = "".equals(header) ? null : header;
}
那么,将标题设置为“”有什么错呢?我想要而不是。@doekman Ehm,我知道已经晚了,但以防万一。要完全实现您想要的功能,可以使用JAXB的实现,它有一个非常好的扩展
@XmlNullPolicy
。参见示例(在“选项2”部分)Hi@Tom。你能详细解释一下怎么做吗?嗨,克里斯,如果你想为Boolean、biginger、BigDecimal等包装器对象创建一个空标记怎么办?显然,如果将null设置为这些值,则不会生成标记。
import javax.xml.bind.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Request {
public static void main(String[] args) throws JAXBException {
final Request request = new Request();
final JAXBContext context = JAXBContext.newInstance(Request.class);
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
marshaller.marshal(request, System.out);
System.out.flush();
}
@XmlElement(nillable=true, required=true)
private String header;
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<request>
<header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</request>
public void setHeader(String header) {
this.header = "".equals(header) ? null : header;
}