我正在尝试创建一个可以同时包含元素和值的java/jaxb类。
我想在A类的列表中读取一个类的属性,并作为A类本身的值输出。
这是XML:
我必须阅读:
<data>
<device id=”DEV123”>
<error id=”ERR1”/>
</device>
</data>
并生产:
<data>
<device id="DEV123">ERR1</device>
</data>
这是我的错误类-工作正常:
@XmlRootElement(name = "error")
public class Error implements Serializable {
private String id;
@XmlAttribute(name ="id")
public String getId() {
return id;
}
public void setId(String id ){
this.id = id;
}
}
我的设备类别:
@XmlRootElement(name = "device")
public class Device implements Serializable {
private String id;
private String device;
private ArrayList<Error> errorList;
@XmlElement
public ArrayList<Error> getErrorList() {
return errorList;
}
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlValue
public String getDevice(){
return this.device;
}
}
Jaxb 抱怨我不能在同一类中同时拥有 xml 元素(错误 )和 xml 值
"If a class has @XmlElement property, it cannot have @XmlValue property."
如何正确建模/注释此内容,以允许我读取 error xml 标记的属性并将其生成为设备标记的值?
您可以执行以下操作:
@XmlMixed
public String getDevice(){
return this.device;
}
用@XmlMixed
注释的属性将选取任何文本字符,无论它是否为空格。如果属性是一个集合,那么如果遇到的不是每一段文本都会清除最后一个文本,它将拾取所有内容。因此,您需要在解析时消除空格。
import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Device.class);
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource("src/forum22284324/input.xml"));
xsr = xif.createFilteredReader(xsr, new StreamFilter() {
@Override
public boolean accept(XMLStreamReader reader) {
if(reader.getEventType() == XMLStreamReader.CHARACTERS) {
return reader.getText().trim().length() > 0;
}
return true;
}
});
Unmarshaller unmarshaller = jc.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(xsr);
}
}
相关示例
我在这里看到了一个类似的问题,但它并没有帮助我解决这个问题,所以我在这里发布我的问题,看看是否有人可以修改我的代码使其工作。 问:如何访问混合内容字符串值并将其保存在 setPhrase(字符串值)方法中? 标题.xml: 标题.java: 在使用JAXB解组和编组之后,我能够将所有内容转换为和对象并保存为相应的内容,但实际短语“Hello World”除外。我知道我必须为这个复杂的元素使用某种@
问题内容: 我有下一个html,我想解析: 我下一堂课: 和: 现在,我还需要span的值(“ bla bla”)。所以我添加到类中: 有点给我下一个错误: 我尝试使用@XMLMixed,但没有成功。我会很高兴例如代码示例。谢谢。 问题答案: 更新 可以同时具有文本和元素的子注释的任何元素都称为混合内容。在JAXB中,这对应于注释。 可以在自家的集合属性使用(见原来的答复),或组合,或。如果该元素
嗨,我正在解组一个XML文件,该文件有一个标记,可以包含值或元素列表。我想知道解组这种XML的最佳方法是什么。例子: 我无法改变XML的构建方式,因此我希望有人能给出答案。非常感谢。
我有这个类结构来序列化TreeGrid(www.TreeGrid.com)对象: 数据网格.java 和 数据网格数据.java 这些类将被处理以返回XML结构,如下所示: 但是封装在B中的信息可能不同(因此在< code>DataGridData类中存在由同一个< code>XmlElement映射的两个属性)。 如果我在Java 7下运行我的项目,这一切都没问题,但是在Java 8下会引发一个
我认为使用插曲有一些问题(它们不包括简单类型?)和注释?有解决这个问题的办法吗?我在网上找不到很多关于这个问题的东西。感谢你的提示。
当我从注释中删除type=integer.class时,我开始在XML中得到maxOccurs=“unbounded”。 @XmlElement(required=true): 但我需要这种类型特别用于基元数据类型。如果注释中没有类型,则不需要的元素(即未设置required=true)缺少minOccurs=1。 有人能帮我吗?