gpt4 book ai didi

XSD 任意类型和 JAXB

转载 作者:行者123 更新时间:2023-12-04 19:36:58 25 4
gpt4 key购买 nike

我有一个 xsd 定义(来自 www.tmforum.org ossj common api v1.5)

<element name="primaryKey" nillable="false">
<complexType mixed="false">
<complexContent mixed="false">
<extension base="anyType"/>
</complexContent>
</complexType>
</element>

并想生成如下的xml

<ossj-co-v1-5:primaryKey>mykey</ossj-co-v1-5:primaryKey>

使用 xjc 从 xsd 生成的 PrimaryKey 类需要将 DOM 元素存储在列表中(请参阅底部生成的 PrimaryKey 类)。这里的“myKey”是一个 TextNode,因为它不是 DOM 元素,所以它不能被添加到 xjc 生成的 PrimaryKey 类。我应该如何继续获得所需的输出?

这里是从xsd生成的PrimaryKey类

    @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
public static class PrimaryKey {

@XmlAnyElement
protected List<Element> any;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();

public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}


public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}

}

最佳答案

以下对象模型适用于您的方案。我将尝试挖掘适当的模式定制来生成这些对象模型。

选项#1

您的代码可以如下所示。这意味着元素“primaryKey”将导致对象 PrimaryKey 被实例化,并在 any 属性上设置相应的文本内容。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = {"any" })
public static class PrimaryKey {

@XmlValue
protected String any;

@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();

public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}


public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}

}

选项 #2

如果您希望外部对象具有与主键对应的 String 属性,您可以执行以下操作:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Root {

// @XmlElement is implied
private String primaryKey;

}

关于XSD 任意类型和 JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com