如何检测JAXB生成的XML元素是可选的还是必需的

时间:2014-06-18 14:21:35

标签: java jaxb

我正在使用一些JAXB生成的类。

有没有办法通过代码确定元素是可选的还是必需的? 根据输入值,我可能需要或不需要一些元素。 例如:一些非常快速的笨重大纲代码,让您了解我的意思:

XMLElement xmlElement = ....;
InputValue inputValue = ....;

 if(xmlElement.isRequired && inputValue.isNull()) {
         //keep empty xmlElement
 } else if(xmlElement.isRequired && ! inputValue.isNull()) {
     xmlElement.setInputValueAttribute(inputValue.toString());
 } else if(!xmlElement.isRequired && inputValue.isNull()) {
     // don't use the empty xmlElement
 } else if(!xmlElement.isRequired && ! inputValue.isNull()) {
     xmlElement.setInputValueAttribute(inputValue.toString());
 }

也许我正在以错误的方式看待这个?

1 个答案:

答案 0 :(得分:0)

好的,好像我们似乎无法(或者至少我无法解决这个问题!JAXB专家请随意回答:))。

我实际意识到,因为我已经知道哪些元素是强制的,哪些不是(由XSD手动),我基本上只是在生成XML类代码的代码中添加了一个Helper方法。在创建可选标记时调用此Helper,并仅检查null / empty inputValues,并相应地添加元素/属性。

E.g。

createXMLElement(value, type, listOfElements);

private void createXMLElement(InputValue value, XMLElementType type, List<XMLElement> listOfElements) {

 XMLElement result = null;
 if (null != value && !value.isEmpty()) {
    result = new XMLElement();
    // populate the atts etc

    listOfElements.add(result);

 }

}

这个问题是手动干扰,我本来希望自动化。嗯,我想第一个版本很好。 :) 此外,它仅限于单个元素类型(在此示例中为XMLElement)。