我为 JAXB 制作了一个复数元素的通用类。
@XmlTransient
public abstract class Plural<S> {
@XmlAnyElement(lax = true)
private Collection<S> singulars;
}
通过以下课程,
@XmlRootElement
public class Item {
//@XmlValue // problem with xsi:nill and ""
@XmlElement(nillable = true)
private String name;
}
@XmlRootElement
public class Items extends Plural<Item> {
}
当我声明name
as@XmlEement(nilalble = true)
时,它工作正常。但是在和@XmlValue
之间产生了一些问题。xsi:nil
""
有什么方法可以设置nillable = true
吗@XmlAnyElement
?
更新 - - - - - - - - - - - - - - - - - - - - - - - - - ---------
当Item#name
使用 注释时@XmlElement
,成功地遵循 XML 编组和解组。
<items xmlns="http://jinahya.googlecode.com/xml/bind/test">
<item id="-4939700912221365683">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item>
<name>name</name>
</item>
<item>
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item id="-8544902644460968391">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
<item id="525642804765733165">
<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</item>
</items>
当Item#name
使用 注释时@XmlValue
,输出 XML 编组和解组,但在相等性测试中失败。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items xmlns="http://jinahya.googlecode.com/xml/bind/test">
<item id="7812630870400466385">name</item>
<item>name</item>
<item id="-1067677982428177088"/>
<item id="5609376399324841172">name</item>
<item id="-4755856949417090129"/>
</items>
每个元素似乎xsi:nil
都省略了。item
所以Item#equals
在每个项目上都失败了。被解析为空元素的""
withoutxsi:nill
每个都来自null
s。只是@XmlValue
问题吗?@XmlAnyElement(lax = true)
@Blaise Doughan 我还是从你的博客文章中了解到的。谢谢。
这就是我想要的。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items xmlns:xsi="..." xmlns="http://jinahya.googlecode.com/xml/bind/test">
<item id="7812630870400466385">name</item>
<item>name</item>
<item id="-1067677982428177088" xsi:nil="true">
<item id="5609376399324841172">name</item>
<item id="-4755856949417090129" xsi:nil="true">
</items>