2013-04-16 85 views
1

新手问题。我询问之前做过搜索!我想如下(主要是HTML表中的数据 - XML)来模拟一些Java类使得JAXB编组输出为:如何声明一个可以包含其他元素或文本的元素

<td> 
     <span class="myClass">assets</span> 
    </td> 
    <td>some text</td> 
    <td>some more text</td> 

基本上,这是十分容易得到的东西与所有以文本值工作。但是,当我试图包含上述跨度的规定(声明为单独的XMLElement)时,我无法自己获取“文本”。例如,它会将文本包装为我声明的用于保存文本的String属性的名称,或者如果我尝试使用@XmlValue将其关闭,那么它会抱怨您不能在同一声明中混合使用XMLElement和XMLValue(即使根据上述情况,我仅使用一种或另一种 - 每个td都包含一个跨距或文本,但不能同时包含两个文本)。

排序输出的是:

<td><span class="myClass">assets</span></td><td><value>some text></value></td> 

,并最终问题归结为“我如何删除那些‘价值’的元素?” 我想:

<td><span class="myClass">assets</span></td><td>some text</td> 

我可以发布的数据,但实际上只在绝对必要的。我所希望的是,上面的解释对于有人提供解决方案是足够的。

谢谢大家的任何帮助。

回答

2

好的,所以这里有答案。看起来很简单,但希望它可以节省一小时的黑客攻击和冲刷jaxb文档。做到以下几点 - 这里的真正问题是让TD变得多态 - 在我的情况下,我只想要一个span或纯文本值。两者都没有用例。

@XmlSeeAlso(Span.class) 
@XmlRootElement(name = "td") 
public class TableData { 

private List<Object> items; 

public TableData() {} 

public TableData(List<Object> items) { 
    this.items = items; 
} 

@XmlMixed 
@XmlAnyElement 
public List<Object> getItems() { 
    return items; 
} 

public void setItems(List<Object> items) { 
    this.items = items; 
} 

} 

我有一个跨度类(也单独声明为的XMLElement。关键是要放宽对什么类型的值可以是限制(不要试图声明两个属性类型,一个字符串文本,还有一个Span.class用于跨度的情况)还要注意@XmlSeeAlso,@XmlMixed和@XmlAnyElement。有些情况下@XmlElementRef和@XmlElementRefs更适合。在我的情况下,使用@XmlAnyElement工作没有大惊小怪

对于一个更完整的讨论,我会建议由布莱斯Doughan给出的回答在这篇文章中给出:JAXB - Java/ XMLValue & XMLElement conflict

相关问题