Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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_Vba_Validation_Xsd_Conditional - Fatal编程技术网

使用XML模式(XSD)进行条件验证

使用XML模式(XSD)进行条件验证,xml,vba,validation,xsd,conditional,Xml,Vba,Validation,Xsd,Conditional,我有一个自定义XML,其中可能缺少一些元素,具体取决于父元素的类型。例如,如果[ATCWaypointType]是“Airport”,则[ICAO]元素只有一个子元素-[ICAOINT]: <ATCWaypoint id="PAKT"> <ATCWaypointType>Airport</ATCWaypointType> <WorldPosition>N55° 21' 38.88",W131° 43' 24

我有一个自定义XML,其中可能缺少一些元素,具体取决于父元素的类型。例如,如果[ATCWaypointType]是“Airport”,则[ICAO]元素只有一个子元素-[ICAOINT]

     <ATCWaypoint id="PAKT">
        <ATCWaypointType>Airport</ATCWaypointType>
        <WorldPosition>N55° 21' 38.88",W131° 43' 24.75",+000131.00</WorldPosition>
        <ICAO>
            <ICAOIdent>PAKT</ICAOIdent>         
        </ICAO>
    </ATCWaypoint>
我正在使用


谢谢大家!

在XSD 1.0中不可能

在XSD1.1中,您可以通过断言来实现。如果您的ATCWayPointType是一个属性而不是一个元素,那么您也可以使用条件类型分配(更简洁地)来完成它

如果您坚持使用1.0,并且可以更改设计,请考虑使用直接命名模式类型的xsi:type属性替换ATCWayPointType元素

还有一个人们往往忘记的选项:在验证之前进行预处理转换。在这种情况下,预处理步骤可能会根据ATCWayPointType的值添加xsi:type属性

    <ATCWaypoint id="wpt01">
        <ATCWaypointType>User</ATCWaypointType>
        <WorldPosition>N57° 19' 35.48",W134° 8' 35.04",+000000.00</WorldPosition>
    </ATCWaypoint>
    <ATCWaypoint id="SSR">
        <ATCWaypointType>VOR</ATCWaypointType>
        <WorldPosition>N58° 10' 39.60",W135° 15' 31.90",+000039.00</WorldPosition>
        <ICAO>
            <ICAORegion>PA</ICAORegion>
            <ICAOIdent>SSR</ICAOIdent>
        </ICAO>
    </ATCWaypoint>
<xs:element name="gender">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="male|female"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>