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文档应该无效。