这是一个非常简单的问题,但我的谷歌技能尚未得到答案,所以:
XSD可以强制一个元素必须在更高级别的元素中存在吗?我知道你可以允许或禁止“明确设置为零”,但这听起来不一样。
例如:
<parentTag>
<childTag1>
... stuff
</childTag1>
<childTag2> <!-- FAIL VALIDATION IF a childTag2 isn't in parentTag!!! -->
... stuff
</childTag2>
</parentTag>
如果是这样,语法是什么?
答案 0 :(得分:2)
默认情况下,XSD中的元素必须存在。如果未指定,则子元素的minOccurs
属性设置为1。
也就是说,您必须通过设置minOccurs="0"
明确地创建可选元素。
示例架构
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="parentTag">
<xs:complexType>
<xs:sequence>
<xs:element name="childTag1" minOccurs="0"/> <!-- This element is optional -->
<xs:element name="childTag2"/> <!-- This element is required -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
测试有效的XML(使用xmllint)
<?xml version="1.0"?>
<parentTag>
<childTag1>
<!-- ... stuff -->
</childTag1>
<childTag2>
<!-- ... stuff -->
</childTag2>
</parentTag>
testfile.xml validates
测试无效的XML
<?xml version="1.0"?>
<parentTag>
<childTag1>
<!-- ... stuff -->
</childTag1>
</parentTag>
testfile.xml:2: element parentTag: Schemas validity error : Element 'parentTag': Missing child element(s). Expected is ( childTag2 ). testfile.xml fails to validate