Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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_Validation_Xsd_Nested - Fatal编程技术网

Xml XSD:如果存在可选父项,则需要嵌套标记

Xml XSD:如果存在可选父项,则需要嵌套标记,xml,validation,xsd,nested,Xml,Validation,Xsd,Nested,我的XML中有可选的标记,如果存在可选标记,那么我需要该元素的子标记,如何使用XSD实现这一点(如果在XSD中不可能实现这一点,则使用另一种解决方案) 我的XML的一个示例部分: <xs:element name="deviceLocation" minOccurs="0" maxOccurs="unbounded" nillable="true"> <xs:complexType>

我的XML中有可选的标记,如果存在可选标记,那么我需要该元素的子标记,如何使用XSD实现这一点(如果在XSD中不可能实现这一点,则使用另一种解决方案)

我的XML的一个示例部分:

                <xs:element name="deviceLocation" minOccurs="0" maxOccurs="unbounded" nillable="true">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element type="xs:string" name="xPos"/>
                      <xs:element type="xs:string" name="yPos"/>
                      <xs:element type="xs:string" name="zPos"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
如果像这样声明(子)元素:

<xs:element name="n" minOccurs="0" type="someType"/>

那么元素是可选的,但是如果它出现,那么它必须符合someType类型。因此,如果someType定义了一个包含强制元素的内容模型,那么n是可选的,但是当存在时,n的子元素是强制的


顺便说一下,元素是可选的,而不是标记。一个元素通常有两个标记,一个开始标记和一个结束标记。

我可以确认它确实是
而不是
?我一直认为XSL是与XSD完全分离的工具。对不起,是的,我的手指会自动键入“XSL:”。将更正。感谢您的帮助,我想澄清一下,当您说
type=“someType”
时,您是指简单的类型,例如
type=“xs:string”
还是指用户定义的类型?我已经实现了这一点,但它仍然允许我使用
xs:element name=“deviceLocation”
不包含position元素,即使在存在
xs:element name=“deviceLocation”
的情况下它们应该是必需的。在您的情况下,someType将是用户定义的类型。当然,它也可以是内联定义的匿名类型。我不知道为什么它不适合您:向我们展示您的完整模式,并告诉我们您使用的是哪个XSD处理器。
<xs:element name="n" minOccurs="0" type="someType"/>