基于属性值的JAXB java解析XML文件
我有一个基于Maven和Spring的Java web应用程序
我有一个配置。src/main/resources中的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<sourceConfigs>
<areas>
<area name="Defects">
<fileHeaders>ID,Issue Key,Fields
</fileHeaders>
</area>
<area name="Organization">
<fileHeaders>ID,Org Key,Fields
</fileHeaders>
</area>
</areas>
<sourceTypes>
<source name="source1">
<adapterObject>source1Adapter</adapterObject>
<resultObject>JsonObject</resultObject>
</source>
<source name="source2">
<adapterObject>source2Adapter</adapterObject>
<resultObject>sourceObject</resultObject>
</source>
</sourceTypes>
</sourceConfigs>
我想基于属性将上述XML解析为Java对象
我创建了两个类
区域。java
@XmlRootElement(name="area")
public class Area {
String name;
String fileHeaders;
@XmlAttribute
//get Name
//set Name
@XmlElement
//get fileHeaders
//set FileHeaders
}
来源。java
@XmlRootElement(name="source")
public class Source {
String name;
String adapterObject;
String resultObject;
@XmlAttribute
//get Name
//set Name
@XmlElement
//get adapterObject
//set adapterObject
@XmlElement
//get resultObject
//set resultObject
}
我想基于属性值解析XML。
ie;如果area的属性值为Defects
,则解析的对象应具有基于该属性的值,否则,如果其Organization
,则基于该属性的值和对象类型应为area对象。对于源类型也类似
我该怎么做
当它只是一个简单的XML文件时,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<sourceConfig area="Defects">
<adapterObject>jAdapter</adapterObject>
<resultObject>jsonObject</resultObject>
</sourceConfig>
我的POJO就是基于此,我用来解析的代码是
public SourceConfig getConfigObject() throws JAXBException, IOException {
JAXBContext jaxbContext = JAXBContext.newInstance(SourceConfig.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Resource resource=new ClassPathResource("config.xml");
File file=resource.getFile();
SourceConfig sourceConfig = (SourceConfig) jaxbUnmarshaller.unmarshal(file);
return sourceConfig;
}
但对于这个复杂的问题,我不知道如何基于属性值和多个数据列表进行解析
如何基于属性值进行解析? 我已经创建了两个POJO来解析不同的类型。如果是一节课也可以
更新1
我的预期产出
当我在解组区域对象时传递值"Defects"
时,这些值应该是
name= Defects
fileHeaders=ID,Issue Key,Fields
如果我通过"Organization"
,区域对象值应该基于此。类似地,在解组源时
现在我得到的是区域列表和源类型列表,然后通过检查值获取相应的对象
是否有任何方法可以基于属性值只解析所选的一个对象,而不是获取列表,然后检查值并返回对象
共 (0) 个答案