繁体   English   中英

JAXB变量属性名称,可以吗?

[英]JAXB variable attribute name, is it possible?

我必须生产这样的东西:

<Doc p1="something">
    <Ext code="one"/>
    <Ext name="two"/>
</Doc>

我知道如何用我的Doc类做这部分,“代码”和“名称”只是Doc的属性,所以我打算创建一个包装类Ext来产生该元素,但是我不确定如何在一种情况下,将“代码”用作属性,在另一种情况下,将“ name”用作属性。 我总是可以创建两个不同的包装器类,但是我想知道是否有一种更简单的方法,例如某种方式设置变量的@XmlAttribute(name =)。

您无法做您想做的事情-正如LINEMAN78所说,变量属性名称不是有效的XSD品牌。 如果您知道候选属性列表由什么组成(例如,Exts可以具有Code,Name,Foo,Bar和Baz),则可以使用@XmlAttribute来定义它们; 默认情况下,不需要XmlAttribute并且如果Java对象的值为null ,则不会在编组输出中显示。

变量属性名称对于xml模式定义无效,但是您可以为元素进行选择,因此可以是:

<Doc p1="something">
    <Code>one</Code>
    <Name>two</Name>
</Doc>

为此,您将使用JaxbElement,并且不需要包装类。 xsd看起来像这样:

<complexType name="Doc">
    <sequence>
        <choice maxOccurs="unbounded">
            <element name="Code" type="string" />
            <element name="Name" type="string" />
        </choice>
    </sequence>
    <attribute name="p1" type="string" />
</complexType>

这将导致以下代码:

@XmlElementRefs({
    @XmlElementRef(name = "Code", type = JAXBElement.class, required = false),
    @XmlElementRef(name = "Name", type = JAXBElement.class, required = false)
})
protected List<JAXBElement<String>> codeOrName;

JaxbElement的用法如下:

new JAXBElement<String>(new QName( "", "Name" ), String.class, Doc.class, value);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM