Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 需要一个没有属性XSD的元素_Xml_Xsd - Fatal编程技术网

Xml 需要一个没有属性XSD的元素

Xml 需要一个没有属性XSD的元素,xml,xsd,Xml,Xsd,我刚刚开始使用XSD来验证我一直在使用的XML配置文件。每个配置都为服务器指定一个默认配置,可以在每台服务器的基础上覆盖该配置 这是默认设置: <server> <cpu>65</cpu> // Other configuration </server> 65 //其他配置 这是一个(可选)覆盖: <server key="2"> <cpu>55</cpu> </server>

我刚刚开始使用XSD来验证我一直在使用的XML配置文件。每个配置都为服务器指定一个默认配置,可以在每台服务器的基础上覆盖该配置

这是默认设置:

 <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>