我有一个非常复杂的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)。可能吗 ?否则,你有什么想法来解决我的问题吗?
非常感谢您的帮助
答案 0 :(得分:0)
你的问题有点不清楚。你想要避免什么? 我对你想要做的事情的方法就是这样的
使用您想要定义的所有元素形成正确的XML 您可以在此处验证您的XML Validate an 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>
</Addresses>
<Email confidential="true">john.doe@mail.com</Email>
<Phone confidential="true">+33110111213</Phone>
</Person>
为您从此处生成的XML生成XML架构XML to XSD generator有3种算法/模式
在eclipse中生成JAXB类。 Eclipse具有输入功能,允许您生成JAXB类Generating JAXB Classes from a Schema
答案 1 :(得分:0)
很抱歉,如果我不清楚的话。实际上,我已经生成了我的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>
及其相应的Java类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ZipCodeType", propOrder = {
"value"
})
public class ZipCodeType {
@XmlValue
protected String value;
@XmlAttribute(name = "confidential")
protected String confidential;
我有一个很大的XML结构,使用这个方法我每个元素都有一个类型/类,所以它意味着很多类和一个非常大的XSD。这是我想避免的,但也许这是不可能的? 否则,我为了管理数据的机密性而讨论任何其他命题?
由于
答案 2 :(得分:0)
您可以在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看起来像这样(你只需提供你想要保密的属性,因为默认是假的):
<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;
}
}
}
答案 3 :(得分:0)
如果我理解正确,也许这与您的问题有关。我使用2种方法从XML / XSD生成java对象。
eclipse工具 (此处有屏幕截图的详细步骤: https://sites.google.com/site/canadadennischen888/home/xml/jaxb-xml-to-pojo/xml-to-pojo/eclipse-feature)
XJC (xjc file_name.xsd -d folder_name -p package)
希望有所帮助