我有一个要素模型以xml格式当遍历必需的特征时,是否可以为任何给定的特征模型生成Java类?

如何解决我有一个要素模型以xml格式当遍历必需的特征时,是否可以为任何给定的特征模型生成Java类?

我尝试使用JAXB读取XML文件,但它仅读取第一级元素。我也不知道如何为XML文件中的每个必需功能生成Java类。这是我正在使用的示例要素模型,以及通过读取文件获得的输出。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <featureModel>
            <struct>
                <and abstract="true" mandatory="true" name="SvgMapApp">
                    <feature name="L2Build"/>
                    <and abstract="true" mandatory="true" name="Layers">
                        <feature name="ColorRegion"/>
                        <feature name="Relief"/>
                        <feature name="Rivers"/>
                        <feature name="Lakes"/>
                        <feature name="PopCircle"/>
                    </and>
                    <and abstract="true" mandatory="true" name="Legends">
                        <and abstract="true" name="Controls">
                            <feature name="Navigator"/>
                            <feature name="ReliefControls"/>
                            <feature name="RiverControls"/>
                            <feature name="LakeControls"/>
                            <feature name="PopCircleControls"/>
                            <feature name="CoordinateDisplay"/>
                        </and>
                        <and abstract="true" name="Stats1">
                            <feature name="AgeChart"/>
                            <feature name="StatsMedianAge"/>
                            <feature name="EthnicBarChart"/>
                            <feature name="EthnicPieChart"/>
                        </and>
                        <and abstract="true" name="Stats2">
                            <feature name="StatsSex"/>
                            <feature name="StatsHouseholds"/>
                            <feature name="StatsPopulation"/>
                        </and>
                        <feature hidden="true" name="Legend"/>
                    </and>
                    <feature hidden="true" mandatory="true" name="USStates"/>
                    <feature mandatory="true" name="Base"/>
                </and>
            </struct>
            <constraints>
                <rule>
                    <imp>
                        <var>PopCircleControls</var>
                        <var>PopCircle</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>ReliefControls</var>
                        <var>Relief</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>RiverControls</var>
                        <var>Rivers</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>LakeControls</var>
                        <var>Lakes</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>Controls</var>
                        <var>Legend</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>Stats1</var>
                        <var>Legend</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>Stats2</var>
                        <var>Legend</var>
                    </imp>
                </rule>
                <rule>
                    <imp>
                        <var>L2Build</var>
                        <not>
                            <var>EthnicBarChart</var>
                        </not>
                    </imp>
                </rule>
            </constraints>
            <comments>
                <c> this turns panel a off</c>
                <c> this turns panel a off</c>
                <c>Layers { tab }</c>
                <c>Legends { out="" }</c>
                <c>Controls { tab }</c>
                <c>Stats1 { tab }</c>
                <c>Stats2 { tab }</c>
            </comments>
        </featureModel>

我想自动生成模型类,但这是我使用过的类以及我获得的输出:

FeatureModel.java

public class FeatureModel {
    
     @XmlElement(name="struct")
     private Struct struct;

       

        public Struct getStruct ()
        {
            return struct;
        }

        public void setStruct (Struct struct)
        {
            this.struct = struct;
        }

       .....
        
}

Struct.java

public class Struct {
    
    @XmlElement(name="and")

    private And and[];
    
    public And[] getAnd ()
    {
        return and;
    }

    public void setAnd (And[] and)
    {
        this.and = and;
    }

    .........
    
    
}

Alt.java

public class Alt {
    @XmlElement(name="feature")
    private Feature[] feature;
    
    @XmlAttribute
    private String name;

   
    @XmlAttribute
    private String mandatory;

    public Feature[] getFeature ()
    {
        return feature;
    }

    public void setFeature (Feature[] feature)
    {
        this.feature = feature;
    }

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    
    public String getMandatory ()
    {
        return mandatory;
    }

    public void setMandatory (String mandatory)
    {
        this.mandatory = mandatory;
    }

    ...........
}

And.java

public class And {
    
    @XmlAttribute
    private String name;
    
    @XmlAttribute
    private String mandatory;
    

    @XmlElement(name="feature")
    private Feature[] feature;
     
    @XmlElement(name="or")
    private Or or;

    @XmlElement(name="alt")
    private Alt alt;
    
    public String getName ()
        {
            return name;
        }

    public void setName (String name)
        {
            this.name = name;
        }
    public Feature[] getFeature ()
        {
            return feature;
        }

    public void setFeature (Feature[] feature)
        {
            this.feature = feature;
        }

    public Or getOr ()
    {
        return or;
    }

    public void setOr (Or or)
    {
        this.or = or;
    }

    public Alt getAlt ()
    {
        return alt;
    }

    public void setAlt (Alt alt)
    {
        this.alt = alt;
    }

  
    public String getMandatory ()
    {
        return mandatory;
    }

    public void setMandatory (String mandatory)
    {
        this.mandatory = mandatory;
    }

    .......
        
}

Or.java

public class Or {
    
    @XmlElement(name="feature")
    private Feature[] feature;
    
    @XmlAttribute
    private String name;

    public Feature[] getFeature ()
    {
        return feature;
    }

    public void setFeature (Feature[] feature)
    {
        this.feature = feature;
    }

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    ......
}

Feature.java

public class Feature {
    
    @XmlAttribute
     private String name;

        public String getName ()
        {
            return name;
        }

        public void setName (String name)
        {
            this.name = name;
        }

        ...............
}

这是我的输出: FeatureModel [struct = Struct [and = [And Root = SvgMapApp,强制= true,feature = [Feature [name = L2Build],Feature [name = USStates],Feature [name = Base]]] [alt = null或= null ]]]]

解决方法

关于调整生成的Java代码,请查看每个元素可以确切包含什么以及缺少什么。例如,xml中的and元素包含featureand(或两者);在And类中,仅存在Feature个列表的成员,因此请手动添加and

public class And {
    
    @XmlAttribute
    private String name;
    
    @XmlAttribute
    private String mandatory;
    

    @XmlElement(name="feature")
    private Feature[] feature;
     
    @XmlElement(name="or")
    private Or or;

    @XmlElement(name="alt")
    private Alt alt;

    // added
    @XmlElement(name="and")
    private And[] and;
}

这也应该涵盖更深层嵌套级别中的and。查看您的输出,and正是所缺少的。我还假设有几个oralt是可能的(因此它们应该是数组字段),但是它们根本不在xml中,所以我想它们来自另一个文件-您必须亲自了解它们的适应方式。

feature似乎总是有一个名称,但有时还有一个hiddenmandatory属性,因此请将它们添加到Feature

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-