如何为具有不同名称的元素编写有效的xsd

时间:2013-02-08 11:49:57

标签: c# xml validation xsd

我想用xsd架构验证xml,但我不知道如何为具有可更改名称的元素创建正确的xsd架构。我的xml文档:

<Settings xmlns="main">
  <Object>
    <Rules>
      <Rule0>
        <Range>0 to 0</Range>
        <String>SomeString</String>
        <Integer>80</Integer>
        <Enabled>No</Enabled>
      </Rule0>
      <Rule0>
        <Range>0 to 0</Range>
        <String>SomeString</String>
        <Integer>80</Integer>
        <Enabled>No</Enabled>
      </Rule0>
    </Rules>
    <ObjectEnabled>No</ObjectEnabled>
  </Object>
</Settings

我的xsd文档:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"           targetNamespace="main" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Settings">
<xs:complexType>
  <xs:sequence>
    <xs:element name="Object">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Rules">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="?" maxOccurs="unbounded" minOccurs="0">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element type="xs:string" name="Range"/>
                      <xs:element type="xs:string" name="String"/>
                      <xs:element type="xs:byte" name="Integer"/>
                      <xs:element type="xs:string" name="Enabled"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element type="xs:string" name="ObjectEnabled"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

    

当然不是“Rule1”,而是“Blablabla”。我知道我不能使用通配符或问号,所以我请求你帮忙。

1 个答案:

答案 0 :(得分:1)

我认为你必须重新组织一些元素。

而不是拥有不同的元素......

<Rule0 />
<Rule1 />
你可以写......

<Rule name="rule0" />
<Rule name="rule1" />

将元素视为描述所有规则属性的类,而不是描述单个规则属性的对象的属性。