有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于属性值的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) 个答案