gpt4 book ai didi

java - 具有属性和内容的元素的 XSD 架构和 JAXB 类

转载 作者:行者123 更新时间:2023-11-30 07:52:54 25 4
gpt4 key购买 nike

我有一个相当复杂的 XML 树结构,其中包含很多元素。对于每个元素,提交者可以选择该值是否保密。目前,我考虑的解决方案类似于以下示例:

<Person>
<Lastname confidential="true">Doe<Lastname>
<Fistname confidential="false">John<Fistname>
<Addresses>
<Address>
<Street confidential="false">aaaaaaa</Street>
<ZipCode confidential="true">75000</ZipCode>
<City confidential="false">Paris</City>
<Country confidential="true">FR</Country>
</Address>
...
<Adresses>
<Email confidential="true">john.doe@mail.com<Email>
<Phone confidential="true">+33110111213<Phone>
...
</Person>

我不是专家,但我想避免为每个元素生成特定类型(在 XSD 架构中)和特定类(使用 JAXB)。是否可以 ?否则,您有什么想法可以解决我的问题吗?

非常感谢您的帮助

最佳答案

您可以在 xsd 中执行此操作:

<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="FirstName" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="lastNameConfidential" type="xsd:boolean" default="false"/>
<xsd:attribute name="firstNameConfidential" type="xsd:boolean" default="false"/>
</xsd:complexType>

因此您的 XML 看起来像这样(您只需为您想要保密的属性提供属性,因为默认值为 false):

<Person lastNameConfidential="true">
<LastName>Doe</LastName>
<FirstName>John</FirstName>
</Person>

生成的 JAXB 类如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Person", propOrder = {
"lastName",
"firstName"
})
public class Person {

@XmlElement(name = "LastName", required = true)
protected String lastName;
@XmlElement(name = "FirstName", required = true)
protected String firstName;
@XmlAttribute(name = "lastNameConfidential")
protected Boolean lastNameConfidential;
@XmlAttribute(name = "firstNameConfidential")
protected Boolean firstNameConfidential;

// Code ommitted

public boolean isLastNameConfidential() {
if (lastNameConfidential == null) {
return false;
} else {
return lastNameConfidential;
}
}

public boolean isFirstNameConfidential() {
if (firstNameConfidential == null) {
return false;
} else {
return firstNameConfidential;
}
}
}

关于java - 具有属性和内容的元素的 XSD 架构和 JAXB 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112529/

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