<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<annotation>
<folder>C:\Users\Asus\IdeaProjects\ai-annotation-mgr\target\classes/tmp/export/102173377124798465labels</folder>
<filename>99512482858795009.jpg</filename>
<path>99512482858795009.jpg</path>
<source>
<database>7</database>
</source>
<size>
<width>500</width>
<height>348</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>脚部</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<occluded>0</occluded>
<bndbox>
<xmin>266</xmin>
<ymin>267</ymin>
<xmax>309</xmax>
<ymax>301</ymax>
</bndbox>
</object>
<object>
<name>脚部</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<occluded>0</occluded>
<bndbox>
<xmin>176</xmin>
<ymin>218</ymin>
<xmax>218</xmax>
<ymax>252</ymax>
</bndbox>
</object>
</annotation>
上图为xml的文件内容
对象类
@Data
@ApiModel("导出xml文件响应体")
@XmlRootElement(name = "annotation")
@XmlAccessorType(XmlAccessType.FIELD)
public class ExportXmlDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("文件夹名称")
private String folder;
@ApiModelProperty("图片文件名称")
private String filename;
@ApiModelProperty("图片文件存储路径")
private String path;
@ApiModelProperty("文件来源")
private List<ExportXmlSourceDto> source;
@ApiModelProperty("图片的尺寸通道信息")
private List<ExportXmlSizeDto> size;
@ApiModelProperty("是否用于分隔任务 一般为0")
@XmlElement(name = "segmented")
private Integer segmented;
@ApiModelProperty("图片的尺寸通道信息")
private List<ExportXmlObjectDto> object;
}
代码的实现:
//xml转为ExportXmlDto
public static Object xmlToObject(File file) {
StringBuffer buffer = null;
try {
FileResource fileResource = new FileResource(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fileResource.getStream(), StandardCharsets.UTF_8));
buffer = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
buffer.append(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
Object xmlObject = null;
Reader reader = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(ExportXmlDto.class);
// xml转为对象的接口 反序列化
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
reader = new StringReader(buffer.toString());
xmlObject = unmarshaller.unmarshal(reader);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return xmlObject;
}