问题描述
使用 jaxb,我尝试读取 xml 文件xml 文件中只有几个元素很有趣,所以我想跳过很多元素
with jaxb, i try to read an xml file only a few element in xml file are interesting, so i would like to skip many element
xml 内容
xml 我尝试阅读
<?xml version="1.0" encoding="UTF-8"?> <!--Sample XML file generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)--> <flx:ModeleREP xsi:schemaLocation="urn:test:mod_rep.xsd mod_rep.xsd" xmlns:xsi="http://www.51sjk.com/Upload/Articles/1/0/337/337260_20221117112654194.jpg" xmlns:flx="urn:test:mod_rep.xsd"> <flx:DocumentHeader> <flx:Identification v="04489"/> </flx:DocumentHeader> <flx:TimeSeries> <flx:Identification v="test1a"/> <flx:BusinessType v="A01"/> <flx:Product v="123a"/> <flx:ResourceObject codingScheme="N" v="testa"/> <flx:Period> <flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/> <flx:Resolution v="PT2H"/> <flx:Pt> <flx:P v="1"/> <flx:Q unitCode="String" v="1.0"/> <flx:A currencyIdentifier="String" v="195.0"/> </flx:Pt> </flx:Period> </flx:TimeSeries> <flx:TimeSeries> <flx:Identification v="test2a"/> <flx:BusinessType v="A01"/> <flx:Product v="a123b"/> <flx:ResourceObject codingScheme="N" v="test2"/> <flx:Period> <flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/> <flx:Resolution v="PT2H"/> <flx:Pt> <flx:P v="1"/> <flx:Q unitCode="String" v="1.0"/> <flx:A currencyIdentifier="String" v="195.0"/> </flx:Pt> <flx:Pt> <flx:P v="2"/> <flx:Q unitCode="String" v="1.0"/> <flx:A currencyIdentifier="String" v="195.0"/> </flx:Pt> </flx:Period> </flx:TimeSeries> </flx:ModeleREP>
我的班级
@XmlRootElement(name="ModeleREP", namespace="urn:test:mod_rep.xsd") public class ModeleREP { @XmlElement(name="TimeSeries") protected List<TimeSeries> timeSeries; public List<TimeSeries> getTimeSeries() { if (this.timeSeries == null) { this.timeSeries = new ArrayList<TimeSeries>(); } return this.timeSeries; } public void setTimeSeries(List<TimeSeries> timeSeries) { this.timeSeries = timeSeries; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "TimeSeries") public class TimeSeries { @XmlElement(name="ResourceObject") protected RessourceObject resourceObject; @XmlElement(name = "Period") protected Period period; public RessourceObject getResourceObject() { return this.resourceObject; } public void setResourceObject(RessourceObject resourceObject) { this.resourceObject = resourceObject; } public Period getPeriod() { return this.period; } public void setPeriod(Period period) { this.period = period; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "ResourceObject") public class RessourceObject { @XmlAttribute(name = "codingScheme") protected String codingScheme; @XmlAttribute(name = "v") protected String v; public String getCodingScheme() { return this.codingScheme; } public void setCodingScheme(String codingScheme) { this.codingScheme = codingScheme; } public String getV() { return this.v; } public void setV(String v) { this.v = v; } } @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name = "Period") public class Period { @XmlElement(name = "TimeInterval") protected TimeInterval timeInterval; @XmlElement(name = "Pt") protected List<Pt> pt; public TimeInterval getTimeInterval() { return this.timeInterval; } public void setTimeInterval(TimeInterval timeInterval) { this.timeInterval = timeInterval; } public List<Pt> getPt() { if (this.pt == null) { this.pt = new ArrayList<Pt>(); } return this.pt; } public void setPt(List<Pt> pt) { this.pt=pt; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "TimeInterval") public class TimeInterval { @XmlAttribute(name = "v") private String timeIntervalPeriod; public String getTimeIntervalPeriod() { return this.timeIntervalPeriod; } public void setTimeIntervalPeriod(String timeIntervalPeriod) { this.timeIntervalPeriod = timeIntervalPeriod; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "Pt") public class Pt { @XmlElement(name = "P") protected P p; @XmlElement(name = "A") protected A a; public P getP() { return this.p; } public void setP(P p) { this.p = p; } public A getA() { return this.a; } public void setA(A a) { this.a = a; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "P") public class P { @XmlAttribute(name = "v") protected String position; public String getPosition(){ return this.position; } public void setPosition(String position){ this.position=position; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "A") public class A { @XmlAttribute(name = "v") protected String calculatedAmount; public String getCalculatedAmount() { return this.calculatedAmount; } public void setCalculatedAmount(String calculatedAmount) { this.calculatedAmount = calculatedAmount; } }
当我尝试读取我得到的 xlm 文件时我明白了
when i try to read the xlm file i get i get
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Class has two properties of the same name "timeSeries" this problem is related to the following location: at public java.util.List testjaxp.ModeleREP.getTimeSeries() at testjaxp.ModeleREP this problem is related to the following location: at protected java.util.List testjaxp.ModeleREP.timeSeries at testjaxp.ModeleREP
我不明白这个错误
我使用 jaxb-impl-2.1.12
edit: i use jaxb-impl-2.1.12
好的,现在我没有任何错误,但是当我检查我的对象时,timeSeries 为空...
ok now i don't have any error, but when i check my object, timeSeries is null...
所以也许 jaxb 似乎对 flx 有问题?
so maybe jaxb seem to have problem with flx?
推荐答案
我也遇到过这样的问题,我设置了这个.
I also faced problem like this and i set this.
@XmlRootElement(name="yourRootElementName") @XmlAccessorType(XmlAccessType.FIELD)
这将工作 100%