当我使用JAXB Marshaller编组Java对象时,编组器不会在Java对象中为空文件创建空元素。例如,我有以下java对象:
public class PersonTraining {
@XmlElement(name = "Val1", required = true)
protected BigDecimal val1;
@XmlElement(name = "Val2", required = true, nillable = true)
protected BigDecimal val2;
@XmlElement(name = "Val3", required = true, nillable = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar val3;
}
当我获取该对象的实例并将其编组为XML时,将得到以下信息(这是因为我没有设置Val2的值):
<PersonTraining>
<Val1>1</Val1>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
但是,我曾期望编组操作具有以下结果(事实上,我还特别需要元素,以便可以根据XSD验证XML)
<PersonTraining>
<Val1>1</Val1>
<Val2></Val2>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
请让我知道我需要设置什么选项,以便也可以将对象属性中的空值编组,并以空/空元素的形式返回。
这是编组代码:
StringWriter sw = new StringWriter();
JAXBContext jc = JAXBContext.newInstance("person_training");
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(ptl, sw);
默认情况下, JAXB(JSR-222)
实现不会编组空值的属性/元素。对于Java模型中的以下字段,这将是正确的。
@XmlElement(name = "Val1", required = true)
protected BigDecimal val1;
您可以像在此处所做的那样通过nillable=true
在@XmlElement
注释上指定来覆盖此行为:
@XmlElement(name = "Val2", required = true, nillable = true)
protected BigDecimal val2;
这将使该xsi:nil="true"
属性具有杠杆作用:
<Val2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
想要查询更多的信息:
人员培训
由于要进行注释,因此fields
应确保@XmlAccessorType(XmlAccessType.FIELD)
在类或包级别进行指定(请参阅:http : //blog.bdoughan.com/2011/06/using-jaxbs-
xmlaccessortype-to.html
)。
import java.math.BigDecimal;
import javax.xml.bind.annotation.*;
import javax.xml.datatype.XMLGregorianCalendar;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class PersonTraining {
@XmlElement(name = "Val1", required = true)
protected BigDecimal val1;
@XmlElement(name = "Val2", required = true, nillable = true)
protected BigDecimal val2;
@XmlElement(name = "Val3", required = true, nillable = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar val3;
}
演示版
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(PersonTraining.class);
PersonTraining pt = new PersonTraining();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(pt, System.out);
}
}
输出量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<personTraining>
<Val2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<Val3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</personTraining>
我是硒的新手,请帮帮我。整个代码: 如何为以粗体突出显示的元素选择xpath?我试过很多例子,但不幸的是没有一个像预期的那样有效。任何帮助都会很好。
“进入库存警报”对象 我不想单击“添加到购物车”。我只想把定位器信息存储在WebElement“AddToCart”中。因为对象具有非常相同的属性,所以我选择了这个唯一的属性“data-tl-id”,但没有起作用。 Web驱动程序 我得到错误“no such element:Unable to locate element:”。如何定位“添加到购物车”对象?
问题内容: 在命令提示符下运行项目时,出现以下错误 我收到以下错误 来源:com / javavids / jaxb / sitemap / UPM / Test.java 来源:com / javavids / jaxb / sitemap / UPM / ObjectFactory.java 来源:com / javavids / jaxb / sitemap / main / Main.ja
执行以下命令时, gst-launch-1.0 filesrc location=野生动物。wmv!decodebin!队列ffmpegcolorspace!自动视频接收器12月!队列音频转换!音频重采样!自动音频接收器 I获取错误如下。 这里有什么问题?
目前,我正在与Selenium合作,尝试使用Chrome中的“Inspect”正确识别元素。在某些情况下,我单击的某些按钮仅由类定义,但使用“”驱动程序无法找到某些类。find_element_by_class_name''。 下面是我从Chrome上用Inspect获得的代码的和平: 我需要单击“导入费用”按钮,该按钮是“x-btn文本menu_import2”类的一部分。我不能在这里使用XPA