我以前也见过一个类似的问题被问过很多次,但这不是我想要的。让我们考虑以下场景:
我有一个如下所示的xml元素:
...
<element>someTextValue</element>
...
或
...
<element>
<listval>someTextValue1</listval>
<listval>someTextValue2</listval>
...
<listval>someTextValueN</listval>
</element>
...
意思是 element
标记中可以有文本值,也可以有包含值的子元素列表。可能有很多 element
整个文件都是这样的 element
s具有值,有些具有子节点。
我有一个java类,如下所示:
@XmlType(name = "element")
public class Element {
public String value;
public List<String> valuesList;
}
现在,我想:
a) 将文本值Map到 value
字段(如果没有值而是子节点,则为null)
b) 将子节点Map到 valueList
字段(如果没有子节点,则为null)
我试过使用 @XmlMixed
以及 @XmlElementRef
到目前为止,我得到的最合理的结果是:
@XmlType(name = "element")
public class Element {
@XmlMixed
public List<String> value; //for some reason this only maps to a list, I want this to be a single String value
@XmlElement(name = "listval")
public List<String> valuesList;
}
现在,如果:
a) 元素具有文本值-该值被正确Map到包含一个元素(即值)的列表-当 value
字段的类型是 String
, valueList
正确为空
我得到:
{
value: [ "someTextValue" ],
valuesList: null
}
我想要:
{
value: "someTextValue",
valuesList: null
}
b) 元素有子节点-在本例中, valuesList
正确Map。但这片土地 value
有多个值是空格和换行符( "\n "
). 我试着用 @XmlJavaTypeAdapter
过滤掉空白,但似乎对元素的文本值不起作用。
我得到:
{
value: [
"\n ",
"\n ",
"\n ",
"\n "
],
valuesList: [ "someTextValue1", "someTextValue2" ]
}
我想要:
{
value: null,
valuesList: [ "someTextValue1", "someTextValue2" ]
}
如果可能的话,我希望使用现有的jaxb注解和/或适配器来实现这一点,而不是手动编组/解编。提前感谢你对这个主题的任何建议,我已经试着让这个工作了几个小时了。
暂无答案!
目前还没有任何答案,快来回答吧!