gpt4 book ai didi

java - JAXB - Java/XMLValue 和 XMLElement 冲突

转载 作者:搜寻专家 更新时间:2023-10-31 08:27:21 26 4
gpt4 key购买 nike

我有下一个 html,我想解析它:

My input: 
<div>
<span id="x1x1"> bla bla </span>
</div>
<span>
<div> bla bla </div>
</span>

My output in java:
jaxbContext = JAXBContext.newInstance(Div.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
jaxbUnmarshaller.unmarshal(file);
System.out.println("id " + div1.getSpan().get(0).get(id) + "value " + div1.getSpan().get(0).get(id))
// should print: id = x1x1 value = bla bla

我有下一节课:

public class Span
List<Div> div;

public List<Div> getDiv() {
return div;
}

@XmlElement
public void setDiv(List<Div> div) {
for (int i = 0 ; i<div.size(); i++){
System.out.print("element")}
this.div = div;
}

和:

public class Div 
List<Span> span = div1.get

@XmlElement
public void setSpan(List<Span> span) {
for (int i = 0 ; i<span.size(); i++){
System.out.print("element")}
this.span = span;
}

public List<Button> getSpan() {
return span;
}

现在,我还需要跨度(“bla bla”)的值。所以我在类 Span 中添加:

String value;

public String getValue() {
return value;
}

@XmlValue
public void setValue(String value) {
this.value = value;
}

它给了我下一个错误:

 If a class has '@XmlElement' property, it cannot have '@XmlValue' property.

我尝试使用@XMLMixed,但没有成功。例如,我很乐意使用代码示例。谢谢。

最佳答案

更新

任何可以同时具有文本和元素子注释的元素都被称为具有混合内容。在 JAXB 中,这对应于 @XmlMixed注解。 @XmlMixed可以单独用于集合属性(参见原始答案)或与 @XmlAnyElement 结合使用, @XmlElementRef , 或 @XmlElementRefs .如果元素可以是任何东西,你会使用 @XmlAnyElement ,如果它是一个已知元素,您将使用 @XmlElementRef而且你使用的不止一个已知元素@XmlElementRefs .

跨度

如果同时有text和div同一 span 元素中的元素,您可以通过同时使用 @XmlElementRef 注释属性来执行以下操作和 @XmlMixed . @XmlElementRef 上指定的元素名称注释必须直接对应于为目标类指定的根元素。

@XmlRootElement
public class Span {

List<Object> items = new ArrayList<Object>();

@XmlMixed
@XmlElementRef(type=Div.class, name="div")
public List<Object> getItems() {
return items;
}

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


}

分区

Div 的元数据几乎与为 Span 指定的元数据相同.

@XmlRootElement
public class Div {

List<Object> items = new ArrayList<Object>();

@XmlElementRef(name="span", type=Span.class)
@XmlMixed
public List<Object> getItems() {
return items;
}

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

}

演示

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Span.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
Span span = (Span) unmarshaller.unmarshal(new StringReader("<span>Text<div>Text2</div>Text3</span>"));
System.out.println(span.getItems());

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(span, System.out);
}

}

输出

[Text, forum15495156.Div@289f6ae, Text3]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<span>Text<div>Text2</div>Text3</span>

原始答案

您可以添加 List<String>@XmlMixed 注释的属性给你的Span类:

跨度

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class Span {
List<Div> div;
List<String> mixed;

@XmlMixed
public List<String> getMixed() {
return mixed;
}

public void setMixed(List<String> mixed) {
this.mixed = mixed;
}

public List<Div> getDiv() {
return div;
}

@XmlElement
public void setDiv(List<Div> div) {
for (int i = 0; i < div.size(); i++) {
System.out.print("element");
}
this.div = div;
}
}

演示

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Span.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
Span span1 = (Span) unmarshaller.unmarshal(new StringReader("<span>bla bla bla</span>"));
System.out.println(span1.getMixed());

Span span2 = (Span) unmarshaller.unmarshal(new StringReader("<span><div/><div/></span>"));
System.out.println(span2.getDiv());
}

}

输出

[bla bla bla]
elementelement[forum15495156.Div@1f80ce47, forum15495156.Div@4166a779]

关于java - JAXB - Java/XMLValue 和 XMLElement 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com