Java 具有属性和内容的元素的XSD模式和JAXB类
我有一个非常复杂的XML树结构,其中包含很多元素。对于每个元素,提交者可以选择值是否为机密。目前,我考虑的解决方案类似于下面的例子:Java 具有属性和内容的元素的XSD模式和JAXB类,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我有一个非常复杂的XML树结构,其中包含很多元素。对于每个元素,提交者可以选择值是否为机密。目前,我考虑的解决方案类似于下面的例子: <Person> <Lastname confidential="true">Doe<Lastname> <Fistname confidential="false">John<Fistname> <Addresses> <Address>
<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>
雌鹿
约翰
AAAAAAAA
75000
巴黎
FR
...
厕所。doe@mail.com
+33110111213
...
我不是专家,但我希望避免为每个元素生成特定类型(在XSD模式中)和特定类(使用JAXB)。可能吗?否则,你有什么办法来解决我的问题吗
非常感谢您的帮助您的问题有点不清楚。你想避免什么 我对你想做的事情的处理方法是这样的
雌鹿
约翰
AAAAAAAA
75000
巴黎
FR
厕所。doe@mail.com
+33110111213
对不起,我不清楚。事实上,我已经生成了XSD和相应的Java类。
我的问题是,如果可能的话,我想避免产生这样的结果:
XSD类型:
<xs:complexType name="ZipCodeType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="confidential"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
我有一个大的XML结构,使用这个方法,每个元素有一个类型/类,所以它意味着很多类和一个非常大的XSD。这是我想避免的,但也许这是不可能的?
否则,为了管理数据的机密性,我是否对任何其他提议感兴趣
谢谢您可以在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/XSD生成java对象
希望能有所帮助您应该将这些额外的信息添加到您的问题中,而不是作为答案。我没有想到这个解决方案,但我喜欢它。非常感谢你
<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>
<Person lastNameConfidential="true">
<LastName>Doe</LastName>
<FirstName>John</FirstName>
</Person>
@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;
}
}
}