Java 如何检测JAXB生成的XML元素是可选的还是必需的
我正在使用一些JAXB生成的类 有没有办法通过代码确定元素是可选的还是必需的? 根据输入值,我有一些元素可能需要,也可能不需要。 例如:一些非常快速、笨拙的大纲代码,让您了解我的意思:Java 如何检测JAXB生成的XML元素是可选的还是必需的,java,jaxb,Java,Jaxb,我正在使用一些JAXB生成的类 有没有办法通过代码确定元素是可选的还是必需的? 根据输入值,我有一些元素可能需要,也可能不需要。 例如:一些非常快速、笨拙的大纲代码,让您了解我的意思: XMLElement xmlElement = ....; InputValue inputValue = ....; if(xmlElement.isRequired && inputValue.isNull()) { //keep empty xmlElement }
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());
}
也许我看错了?好吧,看来我们不能(或者至少我不能弄明白!JAXB专家请随意回答:))
我实际上意识到,因为我已经知道哪些元素是必需的,哪些不是(由XSD手动),我基本上只是在代码中添加了一个Helper方法,用于生成XML类代码。创建可选标记时会调用此帮助程序,它只检查null/empty inputValue,并适当地添加元素/属性
例如
createXMLElement(值、类型、元素列表);
私有void createXMLElement(InputValue值、XMLElementType类型、元素列表){
XMLElement结果=null;
if(null!=value&!value.isEmpty()){
结果=新的XMLElement();
//填充ATT等
元素列表。添加(结果);
}
}
这个问题是手动干扰,我更愿意让它自动化。嗯,我想第一个版本很好。:)
此外,它仅限于单个元素类型(本例中为XMLElement) 模式决定是否需要它。如果您认为需要的字段不存在,您可以在代码中插入某些内容以产生适当的错误,但是通过代码来确定它是否是必需的,我不确定。谢谢。是的,xsd正在根据需要生成java类。问题就在我需要使用它们的时候。我有不同的场景:有时“inputValue”是空的,但标记是必需的,因此我应该实例化该元素类以生成“无内容”的XML。在另一个场景中,inputValue是空的,标记是可选的,因此我不应该实例化类来生成XML。
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);
}
}