![](/img/trans.png)
[英]Require XML element in XSD when another element has certain value?
[英]XSD: If element has a specific value, another should be optional
我有一个XML文档,如:
<?xml version="1.0" encoding="UTF-8"?>
<html2filename xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/mapper.xsd">
<htmlFile filename="N5670A">
<variant>1</variant>
<groups>
<group>
<name>Removing thermostat</name>
</group>
<someOtherElements>asdasd</someOtherElements>
</groups>
</htmlFile>
</html2filename>
现在元素“组” - >“组” - >“名称” - >应该有一个约束:如果“variant”的值为3,则应该是可选的。如果不是,则应该是必需的。
XSD可以处理吗? 如果有,怎么样?
xs:assert
可以实现这样一个对值敏感的约束:
<xs:assert test="(variant = 3) or groups/group/name"/>
在这里,它将在完整的XSD环境中验证您提供的XML:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="html2filename">
<xs:complexType>
<xs:sequence>
<xs:element name="htmlFile">
<xs:complexType>
<xs:sequence>
<xs:element name="variant"/>
<xs:element name="groups">
<xs:complexType>
<xs:sequence>
<xs:element name="group" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="someOtherElements"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="filename"/>
<xs:assert test="(variant = 3) or groups/group/name"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.