java xmlMap@xmlvalue或@xmlelements列表

dm7nw8vv  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(254)

我以前也见过一个类似的问题被问过很多次,但这不是我想要的。让我们考虑以下场景:
我有一个如下所示的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注解和/或适配器来实现这一点,而不是手动编组/解编。提前感谢你对这个主题的任何建议,我已经试着让这个工作了几个小时了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题