У меня есть два списка разных элементов (ruleRef
и rule
) в одном файле XML. Я хотел бы убедиться, что содержимое ruleRef
совпадает с именем любого rule
.
В моем XSD у меня уже есть ограничение xs:key
, например:
<xs:key name="ruleName">
<xs:selector xpath="rules/rule"/>
<xs:field xpath="@name"/>
</xs:key>
Я также использовал этот ключ раньше для проверки атрибута другого элемента, например:
<xs:keyref name="differentRuleRef" refer="ruleName">
<xs:selector xpath="rules/rule/differentRuleRef"/>
<xs:field xpath="@referencedRule"/>
</xs:keyref>
Теперь я хотел бы проверить фактическое содержимое элемента вместо атрибута. Например, в следующем XML второй элемент <ruleRef>
должен быть недопустимым:
<root>
<rules>
<rule name="rule1"/>
<rule name="rule2"/>
</rules>
<ruleRefs>
<ruleRef>rule1</ruleRef>
<ruleRef>nonExistantRule</ruleRef> <!-- invalid -->
</ruleRefs>
</root>
Я пробовал text()
и data(.)
раньше, но оба они недействительны в XPath- подмножество. Я также пробовал .
и ruleRef
, но они, похоже, ничего не подтвердили.