使用jaxb,我尝试读取xml文件
xml文件中只有少数元素是有趣的,所以我想跳过许多元素
xml内容
我尝试阅读的xml
<;?xml version=“1.0”encoding=“UTF-8”?>;
<--XMLSpy v2010 rel生成的示例XML文件。3 sp1(http://www.altova.com)--&燃气轮机;
<;flx:ModeleREP xsi:schemaLocation=“urn:test:mod_rep.xsd mod_rep.xsd”xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“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:周期>;
<;flx:TimeInterval v=“2011-07-02T00:00/2011-07-16T00:00”/>;
<;flx:分辨率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:周期>;
</flx:TimeSeries>;
<;flx:TimeSeries>;
<;flx:Identification v=“test2a”/>;
<;flx:BusinessType v=“A01”/>;
<;flx:Product v=“a123b”/>;
<;flx:ResourceObject codingScheme=“N”v=“test2”/>;
<;flx:周期>;
<;flx:TimeInterval v=“2011-07-02T00:00/2011-07-16T00:00”/>;
<;flx:分辨率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:周期>;
</flx:TimeSeries>;
</flx:ModeleREP>;
我的班级
@XmlRootElement(name=“ModeleREP”,namespace=“urn:test:mod_rep.xsd”)
公共类ModeleREP{
@xmlement(name=“TimeSeries”)
受保护列表<;TimeSeries>;TimeSeries;
公共列表<;TimeSeries>;getTimeSeries(){
if(this.timeSeries==null){
this.timeSeries=newarraylist<;timeSeries>;();
}
返回此.timeSeries;
}
public void setTimeSeries(列表<;TimeSeries>;TimeSeries){
this.timeSeries=timeSeries;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“TimeSeries”)
公共类时间序列{
@XmlElement(name=“ResourceObject”)
受保护的资源对象resourceObject;
@xmlement(name=“Period”)
保护期;
公共资源对象getResourceObject(){
返回此.resourceObject;
}
public void setResourceObject(RessourceObject resourceObject){
this.resourceObject=resourceObject;
}
公共期间getPeriod(){
返回此时间段;
}
公共无效设置期间(期间){
这个周期=周期;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“ResourceObject”)
公共类资源对象{
@XmlAttribute(name=“codingScheme”)
保护字符串编码模式;
@xmltattribute(name=“v”)
保护串v;
公共字符串getCodingScheme(){
返回此.codingScheme;
}
公共无效设置编码模式(字符串编码模式){
this.codingScheme=codingScheme;
}
公共字符串getV(){
归还这个;
}
公共无效setV(字符串v){
这个,v=v;
}
}
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name=“Period”)
公课期间{
@xmlement(name=“TimeInterval”)
受保护的时间间隔;
@xmlement(name=“Pt”)
受保护列表<;Pt>;Pt;
公共时间间隔getTimeInterval(){
返回此.timeInterval;
}
公共无效设置时间间隔(时间间隔时间间隔){
this.timeInterval=时间间隔;
}
公共列表<;Pt>;getPt(){
if(this.pt==null){
this.pt=新阵列列表<;pt>;();
}
返回此.pt;
}
公共无效设置点(列表<;点>;点){
这个.pt=pt;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“TimeInterval”)
公共类时间间隔{
@xmltattribute(name=“v”)
私有字符串时间间隔;
公共字符串getTimeIntervalPeriod(){
返回this.timeIntervalPeriod;
}
public void setTimeIntervalPeriod(字符串timeIntervalPeriod){
this.timeIntervalPeriod=timeIntervalPeriod;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“Pt”)
公务舱{
@xmlement(name=“P”)
保护磷;
@xmlement(name=“A”)
保护A;
公共P getP(){
把这个还给我;
}
公共无效setP(P){
这个,p=p;
}
公共A getA(){
归还这个;
}
公共无效setA(A){
这个a=a;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“P”)
公共P类{
@xmltattribute(name=“v”)
保护串位置;
公共字符串getPosition(){
返回此位置;
}
公共无效设置位置(字符串位置){
这个位置=位置;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“A”)
公共A类{
@xmltattribute(name=“v”)
受保护字符串的计算量;
公共字符串getCalculatedAmount(){
返回此.calculatedAmount;
}
公共void setCalculatedAmount(字符串calculatedAmount){
this.calculatedAmount=calculatedAmount;
}
}
当我尝试读取xlm文件时,我得到
我明白了
com.sun.xml.internal.bind.v2.runtime.illegalannotations异常:1个IllegalAnnotationExceptions计数
类有两个同名的属性“timeSeries”
此问题与以下位置有关:
在public java.util.List testjaxp.ModeleREP.getTimeSeries()中
在testjaxp.ModeleREP
此问题与以下位置有关:
在受保护的java.util.List testjaxp.ModeleREP.timeSeries
在testjaxp.ModeleREP
我不理解这个错误
编辑:我使用jaxb-impl-2.1.12
好的,现在我没有任何错误,但是当我检查我的对象时,timeSeries是空的
那么也许jaxb似乎对flx有问题
我也面临这样的问题,我设定了这个
@XmlRootElement(name=“yourRootElementName”)
@XmlAccessorType(XmlAccessType.FIELD)
这将100%有效