C# 如何使XML模式中的任一字段都是必填字段

C# 如何使XML模式中的任一字段都是必填字段,c#,asp.net,.net,xml,xsd,C#,Asp.net,.net,Xml,Xsd,我有一个像ParcelNumber这样的要求,或者像CoordinateX或CoordinateY这样的坐标是强制性的,这两个在XML中包含不同的层次结构。因此,如果输入xml包含包裹编号,则应返回成功,或者如果它包含两个坐标,则应返回成功。我创建了以下模式,如果只发送包裹编号,则返回成功,但如果发送坐标,则返回失败,它要求发送错误的包裹号。如何实现它。简言之,我有以下问题 1>If i send both coordinates and no parcel number it shou

我有一个像
ParcelNumber
这样的要求,或者像
CoordinateX
CoordinateY
这样的坐标是强制性的,这两个在XML中包含不同的层次结构。因此,如果输入xml包含包裹编号,则应返回成功,或者如果它包含两个坐标,则应返回成功。我创建了以下模式,如果只发送包裹编号,则返回成功,但如果发送坐标,则返回失败,它要求发送错误的包裹号。如何实现它。简言之,我有以下问题

1>If i send both coordinates  and no parcel number it should return success
2>IF i send x coordinate then it should fail and ask to send Y co ordinate
以下是我迄今为止所做的工作

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xsd:element name="NOCPlantMapRequest">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Applicationtype" minOccurs="0" type="xsd:string"/>
                <xsd:element name="RelatedNOCRefNumber" minOccurs="0" type="xsd:string"/>
                <xsd:element name="WorkLocation" minOccurs="1" maxOccurs="1" type="LocationType"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="LocationType">
        <xsd:all>
            <xsd:element name="ParcelNumber" type="ParcelNumberType" maxOccurs="1"/>
            <xsd:element name="WorkArea" type="WorkAreaType" maxOccurs="1"/>
            <xsd:element name="Roads" type="RoadListType" maxOccurs="1"/>
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="RoadListType">
        <xsd:sequence>
            <xsd:element name="WorkLocationRoad" type="WorkLocationRoadType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="WorkLocationRoadType">
        <xsd:sequence>
            <xsd:element name="RoadName" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="CommunitiesListType">
        <xsd:sequence>
            <xsd:element name="WorkLocationRoad" type="WorkLocationRoadType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="ParcelNumberType">
        <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
    <xsd:complexType name="WorkAreaType">
        <xsd:sequence>
            <xsd:element name="WorkArea" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="Coordinates" minOccurs="1" type="CoordinatesType"/>
                        <xsd:element name="Communities" type="CommunitiesListType" maxOccurs="1"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="CoordinatesType">
        <xsd:sequence>
            <xsd:element name="WorkLocationCoordinate" type="WorkLocationCoordinateType"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="WorkLocationCoordinateType">
        <xsd:sequence>
            <xsd:element name="CoordinateX" type="xsd:string"/>
            <xsd:element name="CoordinateY" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

编辑
关于如何正确使用
选项
的任何想法,请参见这里的您可以这样做:-

<xs:choice>
  <xs:sequence>
    <xs:element name="ParcelNumber" />
    <xs:element name="CoOrdinates" minOccurs="0" />
  </xs:sequence>
  <xs:sequence>
    <xs:element name="CoOrdinates" />
    <xs:element name="ParcelNumber" minOccurs="0" />
  </xs:sequence>
</xs:choice>

您可以这样做:-

<xs:choice>
  <xs:sequence>
    <xs:element name="ParcelNumber" />
    <xs:element name="CoOrdinates" minOccurs="0" />
  </xs:sequence>
  <xs:sequence>
    <xs:element name="CoOrdinates" />
    <xs:element name="ParcelNumber" minOccurs="0" />
  </xs:sequence>
</xs:choice>

试试这个

  <xsd:complexType name="WorkLocationCoordinateType">
        <xsd:sequence>
            <xsd:element name="CoordinateX" type="xsd:string" minOccurs="1"/>
            <xsd:element name="CoordinateY" type="xsd:string" minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
​
试试这个

  <xsd:complexType name="WorkLocationCoordinateType">
        <xsd:sequence>
            <xsd:element name="CoordinateX" type="xsd:string" minOccurs="1"/>
            <xsd:element name="CoordinateY" type="xsd:string" minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
​

@avinash由于层次结构不同,如WorkLocationCoordinateType->CoordinateType->WorkAreaType->WorkLocationRoadType@avinashHow我是否应该将其安装到xsd中,由于层次结构不同,如WorkLocationCoordinationType->CoordinationType->WorkAreaType->WorkLocationRoadType即使在填写坐标后仍显示需要发送的地块编号,然后将minOccurs=“0”添加到地块编号。如果我这样做,上述问题将得到解决,但是,如果我没有将parcelnumber和坐标之类的内容置为空,它仍然显示为空,如何修复它意味着如果parcelnumber和坐标都为空,那么它显示的是不应该发生的成功。它们中的任何一个都应该显示为空,即使在填充坐标后,它显示的是需要发送的地块编号,然后添加minOccurs=“0”如果我这样做,上述问题将得到解决,但如果我没有将parcelnumber和坐标之类的内容设置为null,它仍然显示为null,如何修复它?我的意思是,如果parcelnumber和坐标都为null,那么它将显示不应发生的成功。如果这个问题是关于XML模式的,用XSD标记问题。否则,对XSD感兴趣的人将找不到它。接下来,如果您对XML模式有疑问,请始终发布与之配套的示例XML文档。理想情况下,一个XML文档应该对此模式有效,另一个XML文档应该无效。否则,对XSD感兴趣的人将找不到它。接下来,如果您对XML模式有疑问,请始终发布与之配套的示例XML文档。理想情况下,一个XML文档应该对此模式有效,另一个XML文档应该无效。