我有下一个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;
}
现在,我还需要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
。
跨度
如果div
在同一span元素中同时包含text和elements,则可以通过使用@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
的元数据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类。 我想在A类的列表中读取一个类的属性,并作为A类本身的值输出。 这是XML: 我必须阅读: 并生产: 这是我的错误类-工作正常: 我的设备类别: Jaxb 抱怨我不能在同一类中同时拥有 xml 元素(错误 )和 xml 值 如何正确建模/注释此内容,以允许我读取 error xml 标记的属性并将其生成为设备标记的值?
嗨,我正在解组一个XML文件,该文件有一个标记,可以包含值或元素列表。我想知道解组这种XML的最佳方法是什么。例子: 我无法改变XML的构建方式,因此我希望有人能给出答案。非常感谢。
我在这里看到了一个类似的问题,但它并没有帮助我解决这个问题,所以我在这里发布我的问题,看看是否有人可以修改我的代码使其工作。 问:如何访问混合内容字符串值并将其保存在 setPhrase(字符串值)方法中? 标题.xml: 标题.java: 在使用JAXB解组和编组之后,我能够将所有内容转换为和对象并保存为相应的内容,但实际短语“Hello World”除外。我知道我必须为这个复杂的元素使用某种@
我有下一个html,我想解析它: 我有下一节课: 和: 现在,我还需要跨度的值(“bla-bla”)。因此,我将添加到类中: 位它给了我下一个错误: 我尝试使用@XMLMixed,但是没有成功。我会很高兴,例如代码的例子。谢了。
我有这个类结构来序列化TreeGrid(www.TreeGrid.com)对象: 数据网格.java 和 数据网格数据.java 这些类将被处理以返回XML结构,如下所示: 但是封装在B中的信息可能不同(因此在< code>DataGridData类中存在由同一个< code>XmlElement映射的两个属性)。 如果我在Java 7下运行我的项目,这一切都没问题,但是在Java 8下会引发一个
是否有可能有一个使用值 AND 元素呈现的 JAXB 元素? 我正在尝试渲染类似下面的内容: 它甚至可能不是有效的XML,但不幸的是,我试图渲染的东西需要它,而不是可选的。 如果有一个值和元素,则会给出一个。