Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何声明可以包含其他元素或仅包含文本的元素_Java_Xml_Jaxb - Fatal编程技术网

Java 如何声明可以包含其他元素或仅包含文本的元素

Java 如何声明可以包含其他元素或仅包含文本的元素,java,xml,jaxb,Java,Xml,Jaxb,新手问题。我在问之前搜索过!我想对一些Java类进行建模,以便JAXB编组的输出如下所示(基本上是HTML表数据-XML): 资产 一些文本 更多的文字 基本上,使用所有的文本值进行操作非常容易。但当我试图为上述范围(声明为一个单独的XMLElement)包含规定时,我无法单独获得“文本”。例如,它或者用我声明的字符串属性的名称包装文本以保存文本,或者如果我试图使用@XmlValue关闭该属性,那么它会抱怨不能在同一声明中混合使用xmlement和XmlValue(尽管我仅使用一个或另一个,

新手问题。我在问之前搜索过!我想对一些Java类进行建模,以便JAXB编组的输出如下所示(基本上是HTML表数据-XML):


资产
一些文本
更多的文字
基本上,使用所有的文本值进行操作非常容易。但当我试图为上述范围(声明为一个单独的XMLElement)包含规定时,我无法单独获得“文本”。例如,它或者用我声明的字符串属性的名称包装文本以保存文本,或者如果我试图使用@XmlValue关闭该属性,那么它会抱怨不能在同一声明中混合使用xmlement和XmlValue(尽管我仅使用一个或另一个,具体取决于上面的上下文-每个td包含一个跨度或文本,但不能同时包含两个)

输出类型为:

<td><span class="myClass">assets</span></td><td><value>some text></value></td>
assetsome text>
最终问题归结为“我如何删除这些“价值”元素?” 我想:

<td><span class="myClass">assets</span></td><td>some text</td>
assetsome文本
我可以发布数据,但真的只有在绝对必要的情况下。我希望上述解释足以让某人提供解决方案


谢谢大家的帮助。

好的,下面是答案。看起来很简单,但希望它能为其他人节省一个小时的黑客和搜索jaxb文档的时间。执行以下操作-这里的真正问题是使TD具有多态性-在我的情况下,我只需要span或纯文本值。没有一个使用r两者都有

@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;
}

}
@xmlsee(Span.class)
@XmlRootElement(name=“td”)
公共类表数据{
私人清单项目;
公共表数据(){}
公共表格数据(列表项){
这个项目=项目;
}
@混合
@XmlAnyElement
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
}
我有一个Span类(也单独声明为XMLElement。诀窍是放松对值可以是什么类型的限制(不要尝试声明两个属性类型,一个字符串用于文本,一个Span.class用于Span情况)。还要注意@xmlseealal、@XmlMixed和@xmlanyement。有些情况下@xmlementref和@xmlementrefs会更适合。在我这里的情况下,使用@xmlanyement是没有问题的

为了更全面的讨论,我推荐Blaise Doughan在本文中给出的答案:

@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;
}

}