Relax NG中如何定义可任意交错重复的两类node节点校验规则?
解决方案
Relax NG完全支持两类节点任意交错重复的规则,你的校验报错是因为原有规则强制了两类节点的出现顺序:必须先全是Value1类型的<node>,再全是Value2类型的<node>,不允许穿插。
修改后的规则如下:
<rng:start> <rng:element name="root"> <!-- 每个node可以是两类中的任意一种,允许重复、任意顺序 --> <rng:oneOrMore> <rng:choice> <!-- 第一类node:fixedValue为Value1 --> <rng:element name="node"> <rng:element name="variableValueElement"> <rng:data type="string"/> </rng:element> <rng:element name="fixedValueElement"> <rng:value type="string">Value1</rng:value> </rng:element> </rng:element> <!-- 第二类node:fixedValue为Value2 --> <rng:element name="node"> <rng:element name="variableValueElement"> <rng:data type="string"/> </rng:element> <rng:element name="fixedValueElement"> <rng:value type="string">Value2</rng:value> </rng:element> </rng:element> </rng:choice> </rng:oneOrMore> </rng:element> </rng:start>
规则说明
- 外层
rng:oneOrMore保证<root>下至少存在1个<node>节点,若允许空节点可替换为rng:zeroOrMore - 内层
rng:choice规定每一个<node>都可以是两类中的任意一种,没有排列顺序限制,完全满足你两类节点任意交错、重复出现的需求。
内容的提问来源于stack exchange,提问作者Pick
相关产品推荐
相关产品推荐

