Xml 需要一个没有属性XSD的元素
我刚刚开始使用XSD来验证我一直在使用的XML配置文件。每个配置都为服务器指定一个默认配置,可以在每台服务器的基础上覆盖该配置 这是默认设置:Xml 需要一个没有属性XSD的元素,xml,xsd,Xml,Xsd,我刚刚开始使用XSD来验证我一直在使用的XML配置文件。每个配置都为服务器指定一个默认配置,可以在每台服务器的基础上覆盖该配置 这是默认设置: <server> <cpu>65</cpu> // Other configuration </server> 65 //其他配置 这是一个(可选)覆盖: <server key="2"> <cpu>55</cpu> </server>
<server>
<cpu>65</cpu>
// Other configuration
</server>
65
//其他配置
这是一个(可选)覆盖:
<server key="2">
<cpu>55</cpu>
</server>
55
我不确定如何构建XSD以支持1个不带属性的必需元素,以及0-n个具有相同名称属性的元素。对于不同的名称,这是一件容易得多的事情,但考虑到元素在其他方面是相同的,这看起来很混乱
编辑:
为了满足@kjhughes的请求,这里是简化的文档结构:
<configuration>
<target>Production</target>
<responsible>email@email.com</responsible>
<server>
<cpu>65</cpu>
</server>
<server key="2">
<cpu>55</cpu>
</server>
</configuration>
生产
email@email.com
65
55
尝试JAXB解组,您可以创建可用于解组XML的java对象,这使得处理XML更容易
使用xsd生成jaxb对象
根据eclipse中的IDE,只需右键单击xmlroot并按generate jaxb、、、、在同一内容模型中不能有同名的不同元素。 但是您可以更改第二个
服务器
元素的名称,以反映它们是服务器覆盖:
生产
email@email.com
65
55
并且仍然通过扩展在类型定义中共享它们的共性:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="target"/>
<xs:element name="responsible"/>
<xs:element name="server" type="server-type"
minOccurs="1" />
<xs:element name="server-override" type="server-override-type"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="server-type">
<xs:sequence>
<xs:element name="cpu"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="server-override-type">
<xs:complexContent>
<xs:extension base="server-type">
<xs:attribute name="key" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
问题是我还没有XSD(我也没有使用Java)。我担心在浏览规范时会出现这种情况。不过,使用扩展将使这变得容易得多。谢谢
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="target"/>
<xs:element name="responsible"/>
<xs:element name="server" type="server-type"
minOccurs="1" />
<xs:element name="server-override" type="server-override-type"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="server-type">
<xs:sequence>
<xs:element name="cpu"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="server-override-type">
<xs:complexContent>
<xs:extension base="server-type">
<xs:attribute name="key" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>